Znn3bq.jpeg
²é¿´: 291  |  »Ø¸´: 0
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

sdlj8051

½ð³æ (ÖøÃûдÊÖ)

[½»Á÷] [תÌù]DLLÊä³öÀàʹÓÃÑо¿ÊÖ¼Ç

ÔÚдһ¸ö³ÌÐòʱ£¬ÎÒÏëʹÓÃÒ»¸ö¹²ÏíÈí¼þÖеÄC++Àà¡£¸ÃÀàÃûΪCrypt£¬·â×°ÔÚÒ»¸öDLLÖУ¬ÎļþÃûΪCrypt.dll¡£Í¨¹ýSoftIceºÍIDA Pro£¬ÎÒÒÑ»ù±¾ÅªÇåÁËÆä³ÉÔ±º¯ÊýµÄÓ÷¨¡£ÏÖÔÚµÄÎÊÌâÊÇ£¬Ã»ÓÐÏàÓ¦µÄ.HÎļþ¼°.LIBÎļþ£¨µ±È»¸üûÓÐÔ´Â룩¡£ÁíÍ⣬Æä³ÉÔ±º¯ÊýÏÔÈ»²»ÄÜÒÔGetProcAddressÈ¡µÃµØÖ·ºóÖ±½Óµ÷Óá£

¸ÃÈí¼þÊÇÓÃBorland C++дµÄ¡£

ÏÈÓÃBorland C++ÌṩµÄ¹¤¾ß»ñÈ¡±ØÒªµÄÎļþ

C:\bc5\bin\impdef  Crypt.def  Crypt.dll//µÃµ½Crypt.defÎļþ
C:\bc5\bin\implib  Crypt.lib  Crypt.dll//µÃµ½Crypt.libÎļþ

Crypt.defÖеÄÏà¹ØÄÚÈÝÈçÏ£º

@Crypt@$bctr$qpxc@1; Crypt::Crypt(const char*)
@Crypt@$bctr$qpxuci@2; Crypt::Crypt(const unsigned char*,int)
@Crypt@DecodeFrom$qpuct1l¡¡@3; Crypt:ecodeFrom(unsigned char*,unsigned
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡char*,long)
@Crypt@EncodeTo$qpuct1l¡¡@4; Crypt::EncodeTo(unsigned char*,unsigned
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡char*,long)

´Ó·ÖºÅºóµÄ×¢ÊÍ£¬¿ÉÒԵõ½DemangledºóµÄ³ÉÔ±º¯ÊýÔ­ÐÍ£¬µ«ÊÇûÓÐÀàµÄ¶¨Ò壬ÎÒÃDz»ÖªµÀÕâ¸öÀà°üº¬Ê²Ã´Êý¾Ý³ÉÔ±(ÒÔ¼°±ðµÄδexportedµÄ³ÉÔ±º¯Êý£¬ÕâÒ»µã²»ÖØÒª£¬ÒòΪԭÀ´µÄ±à³ÌÕßÔÚʹÓÃÕâ¸ö·â×°ÔÚDLLÖеÄÀàʱ£¬Ò²Ö»ÄÜʹÓÃexportedµÄº¯Êý)¡£ÈçºÎ¹¹ÔìÒ»¸öÕýÈ·µÄÍ·Îļþ£¿ÏÈÀ´¿´¿´Ô­À´µÄ´úÂëÊÇÈçºÎʹÓÃÕâ¸öÀàµÄ¡£ÒÔÏÂΪIDA ProµÄÊä³ö£º

00453E3E 0F0push   8
00453E40 0F4lea    eax, [ebp+var_8]
00453E43 0F4push   eax
00453E44 0F8lea    ecx, [ebp+var_E0]
00453E4A 0F8push   ecx
00453E4B 0FCcall   Crypt::Crypt(uchar *,int)
00453E50 0FCadd    esp, 0Ch

Õâ¶Î´úÂëµ÷ÓÃCrypt::Crypt(uchar *,int)³ÉÔ±º¯Êý£¬Ê¹ÓÃ__cdeclµ÷ÓùæÔò£¬Óɵ÷ÓÃÕßά»¤¶ÑÕ»¡£º¯ÊýÓÐ2¸ö²ÎÊý£¬Ïò¶ÑÕ»ÖÐѹÈëÁË3¸öÖµ£¬×îºóÒ»¸öpushÈëÕ»µÄÊÇÖ¸Ïòµ±Ç°Crypt¶ÔÏóµÄthisÖ¸Õ룬¼´±äÁ¿var_E0¾ÍÊÇÔÚÕ»ÉÏ·ÖÅäµÄCryptÀà¶ÔÏó¡£´ÓIDA ProÖпɿ´µ½£¬var_E0¸²¸ÇÁË´ÓFFFFFF20µ½FFFFFF80¹²96×ֽڵĿռ䡣ÎÒÃÇÖªµÀ£¬C++ÀàµÄ³ÉÔ±º¯Êý¡¢¾²Ì¬Êý¾Ý³ÉÔ±ÊDz»·ÅÔÚ¶ÔÏóÄڵ쬶ÔÏóÖ»º¬ÓÐÊý¾Ý³ÉÔ±£¨ÈôÀàÖлòÆä»ùÀàÖж¨ÒåÓÐÐ麯Êý£¬»¹°üº¬vptr£©¡£Ò²¾ÍÊÇ˵£¬CryptÀàµÄËùÓÐÊý¾Ý³ÉÔ±¹²Õ¼¾Ý96×Ö½Ú¡£¾ßÌåϸ½ÚÇë²ÎÕÕStanley LippmanµÄ¡¶Éî¶È̽Ë÷C++¶ÔÏóÄ£ÐÍ¡·¡£

ÓÉ´Ë£¬ÎÒÃÇ¿ÉÒÔ×Ô¼º¶¨ÒåCryptÀàµÄÊý¾Ý³ÉÔ±£¨Ê¹ÓÃ×Ö½ÚÊý×飩£¬Ê¹ÆäÕ¼¾ÝͬÑùµÄÄÚ´æ¿Õ¼ä£¬ÓëÔ­À´µÄÀàÔÚÄÚ´æ²¼¾ÖÉÏÒ»Ö¼´¿É¡£Êµ¼ÊÉÏ£¬Ö»ÒªÎÒÃǸø³öµÄÀඨÒå±£Ö¤ÄÜ·ÖÅä×ã¹»µÄÄÚ´æ¿Õ¼ä£¬Ô­À´µÄ¹¹Ô캯Êý¾Í¿ÉÒÔÔÚ·ÖÅäµÄÄÚ´æÖд´½¨³öÕýÈ·µÄ¶ÔÏó¡£ÕâÖÖ·½·¨ÓëCOMµÄ˼ÏëÓÐÏàËÆÖ®´¦£¬¶¼ÊÇÔÚ¶þ½øÖƵļ¶±ðÉϱ£Ö¤ÄÚ´æ²¼¾ÖµÄ¼æÈÝ¡£ÎÒдµÄÍ·ÎļþÈçÏ£º

class _import Crypt
{
public:
¡¡¡¡Crypt(const char* lpszPassword);
¡¡¡¡Crypt(const unsigned char* lpszPassword,int cbBuffer);
¡¡¡¡EncodeTo(unsigned char* lpSource,unsigned char* lpDestination,int nSize);
¡¡¡¡DecodeFrom(unsigned char* lpSource,unsigned char* lpDestination,int nSize);

public:
¡¡¡¡char dummy[96];   //Bingo!:-)
};

½«´ËÍ·Îļþ¼°Ç°ÃæµÄCrypt.libÎļþ¼ÓÈëÏîÄ¿£¬Ö¤Ã÷´Ë·½·¨ÊÇ¿ÉÐеġ£²âÊÔ´úÂëÈçÏ£º

¡¡Crypt obj("123456";
¡¡obj.EncodeTo(lpData,lpData,nSize);

ÒÔÉϵij¢ÊÔ¶¼ÊÇÔÚBorland C++ÏÂ×öµÄ£¬ÓëÔ­À´µÄ³ÌÐò¾ßÓÐͬÑùµÄ»·¾³£¬Èç¹ûÏëÔÚVisual C++ÏÂʹÓøÃÀàÓÖÈçºÎʵÏÖ£¿´ÓDLLÖÐÊä³öÀàµÄ¼¼Êõϸ½ÚÊÇÒò±àÒëÆ÷³§É̶øÒìµÄ£¬ÏÔÈ»²»ÄÜÔÙÈç·¨ÅÚÖÆ£¨VC++ÉõÖÁ²»ÄÜʶ±ðÓÃimplibÉú³ÉµÄCrypt.libÎļþ£©¡£ÎÒÃÇ¿ÉÒÔ±äͨһÏ£¬×Ô¼ºÓÃVC++дһ¸öCrypt.dll,°ü¹üÔÚÔ­À´µÄDLLÍâÃæ£¬Êä³öÓëÔ­ÓÐDLLÏàͬÃû×ÖºÍÐòºÅµÄº¯Êý£¬ÓÃVC++дµÄ¿Í»§³ÌÐòʹÓÃÕâ¸öWrapper DLL£¬ÓÉÆäÔÙÈ¥µ÷ÓÃÔ­À´µÄDLL¡£ÕâÖÖ±àдһ¸ö°üÔÚÔ­ÓÐDLLÍâÃæµÄ¶¯Ì¬Á´½Ó¿âµÄ·½·¨£¬Ïà¹Ø×ÊÁϺܶ࣬ÕâÀï²»ÔÙÏêϸ½âÊÍ¡£

½«Ô­À´µÄDLL¸ÄÃûΪOldDll.dll¡£Ô´´úÂëÈçÏ£º

Í·ÎļþCrypt.h£º

#ifdef CRYPT_EXPORTS
#define CRYPT_API __declspec(dllexport)
#else
#define CRYPT_API __declspec(dllimport)
#endif

class CRYPT_API Crypt {

public:
¡¡Crypt& operator=(const Encrypt& rhs);//¸³ÖµÔËËã·û£¬½ûÖ¹
¡¡Crypt(const Encrypt& rhs);//¿½±´¹¹Ô캯Êý£¬½ûÖ¹

public:
¡¡Crypt(const char* lpszPassword);
¡¡Crypt(const unsigned char* lpszPassword,int cbBuffer);
¡¡void __cdecl EncodeTo(unsigned char* lpSource,unsigned char*
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡lpDestination,int nSize);
¡¡void __cdecl DecodeFrom(unsigned char* lpSource,unsigned char* ¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡lpDestination,int nSize);

public:
char dummy[96];   //Bingo!:-)
};

ʵÏÖÎļþCrypt.cpp£º

#include "stdafx.h"
#include "Crypt.h"

static HINSTANCE hOldDll=NULL;

static DWORD dwRet;
static DWORD dwRetAddr;

static FARPROC lpCrypt1;//´ø1¸ö²ÎÊýµÄ¹¹Ô캯Êý
static FARPROC lpCrypt2;//´ø2¸ö²ÎÊýµÄ¹¹Ô캯Êý
static FARPROC lpEncodeTo;
static FARPROC lpDecodeFrom;

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved )
{
¡¡BOOL bRet=false;

¡¡switch (ul_reason_for_call)
¡¡{
¡¡¡¡case DLL_PROCESS_ATTACH:

¡¡¡¡¡¡¡¡//¼ÓÔØÔ­À´µÄDLL£¬»ñȡԭº¯ÊýµØÖ·

¡¡¡¡¡¡¡¡hOldDll=LoadLibrary("c:\\test\\OldDll.dll";
¡¡¡¡¡¡¡¡if(hOldDll)
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡¡¡lpCrypt1=::GetProcAddress(hOldDll,MAKEINTRESOURCE(0x1));
¡¡¡¡¡¡¡¡¡¡¡¡lpCrypt2=::GetProcAddress(hOldDll,MAKEINTRESOURCE(0x2));
¡¡¡¡¡¡¡¡¡¡¡¡lpEncodetTo=::GetProcAddress(hOldDll,MAKEINTRESOURCE(0x3));
¡¡¡¡¡¡¡¡¡¡¡¡lpDecodeFrom=::GetProcAddress(hOldDll,MAKEINTRESOURCE(0x4));

¡¡¡¡¡¡¡¡¡¡¡¡bRet=true;
¡¡¡¡¡¡¡¡}

¡¡¡¡¡¡¡¡break;

¡¡¡¡¡¡case DLL_THREAD_ATTACH:
¡¡¡¡¡¡¡¡break;

¡¡¡¡¡¡case DLL_THREAD_DETACH:
¡¡¡¡¡¡¡¡break;

¡¡¡¡¡¡case DLL_PROCESS_DETACH:
¡¡¡¡¡¡¡¡if(hOldDll)
¡¡¡¡¡¡¡¡{
¡¡¡¡¡¡¡¡¡¡::FreeLibrary(hOldDll);
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡¡¡break;
¡¡¡¡}
  
¡¡¡¡return bRet;
}

__declspec(naked) Crypt::Crypt(const char *lpszPassword)
{
¡¡¡¡//ÊÖ¹¤Ä£·Â__cdelµ÷ÓùæÔò

¡¡¡¡_asm
¡¡¡¡{
¡¡¡¡¡¡¡¡pop eax//µ¯³ö²¢±£´æ·µ»ØµØÖ·
¡¡¡¡¡¡¡¡mov dwRetAddr,eax

¡¡¡¡¡¡¡¡push ecx//ѹthisÖ¸ÕëÈëÕ»

¡¡¡¡¡¡¡¡call lpCrypt1¡¡//µ÷ÓÃÔ­º¯Êý

¡¡¡¡¡¡¡¡mov dwRet,eax¡¡//±£´æµ÷Ó÷µ»ØÖµ

¡¡¡¡¡¡¡¡mov eax,dwRetAddr
¡¡¡¡¡¡¡¡push eax//ÖØÐÂѹ·µ»ØµØÖ·ÈëÕ»

¡¡¡¡¡¡¡¡mov eax,dwRet¡¡//»Ö¸´µ÷Ó÷µ»ØÖµ

¡¡¡¡¡¡¡¡ret 8¡¡//·µ»Ø£¬¶ªÆú2¸ödword(²ÎÊýºÍthisÖ¸Õë)
¡¡¡¡}
}

__declspec(naked) Crypt::Crypt(const unsigned char* lpszPassword,int cbBuffer)
{
¡¡¡¡//ÊÖ¹¤Ä£·Â__cdelµ÷ÓùæÔò

¡¡¡¡_asm
¡¡¡¡{
¡¡¡¡¡¡¡¡pop eax
¡¡¡¡¡¡¡¡mov dwRetAddr,eax

¡¡¡¡¡¡¡¡push ecx

¡¡¡¡¡¡¡¡call lpCrypt2

¡¡¡¡¡¡¡¡mov dwRet,eax

¡¡¡¡¡¡¡¡mov eax,dwRetAddr
¡¡¡¡¡¡¡¡push eax
¡¡¡¡¡¡¡¡mov eax,dwRet
¡¡¡¡¡¡¡¡ret 0xC¡¡¡¡¡¡¡¡//¶ªÆú3¸ödword
¡¡¡¡}
}

void __declspec(naked) __cdecl Crypt::EncodeTo(unsigned char* lpSource,
unsigned char* lpDestination,int nSize)
{
¡¡¡¡//Ö±½ÓÌø×ªµ½Ô­º¯Êý

¡¡¡¡_asm jmp far dword ptr lpEncodeTo
}

void __declspec(naked) __cdecl Crypt:ecodeFrom(unsigned char* lpSource,
unsigned char* lpDestination,int nSize)
{
¡¡¡¡//Ö±½ÓÌø×ªµ½Ô­º¯Êý

¡¡¡¡_asm jmp far dword ptr lpDecodeFrom
}

Óм¸´¦ÐèҪעÒ⣺Ê×ÏÈ£¬ÕâÀïʹÓÃÁËnakedµ÷ÓùæÔò£¨Borland C++²»Ö§³Ö£©£¬ÒÔ±ãÓÚÖ±½Ó²Ù×÷¶ÑÕ»¼°ÓÃÄÚǶµÄ»ã±àÓïÑÔ±à³Ì¡£ÁíÍ⣬ËäÈ»ÎÒÃǵÄÀàÖв¢Ã»Óаüº¬Ð麯Êý»ò¶ÔÏó³ÉÔ±£¬VC++±àÒëÆ÷È´ÈÔÉú³ÉÁËmember-wiseµÄ¿½±´¹¹Ô캯ÊýºÍbit-wise¸³ÖµÔËËã·û£¬²¢µ¼ÖÂÔ­À´µÄDLLÖеĹ¹Ô캯Êý²»ÄÜÕýÈ·´´½¨¶ÔÏó¡£ÎªÁ˽ûÖ¹±àÒëÆ÷×Ô¶¯Éú³É²»±ØÒªµÄ´úÂ룬ÔÚÍ·ÎļþÖж¨ÒåÁ˸³ÖµÔËËã·ûºÍ¿½±´¹¹Ô캯Êý£¬µ«²¢Î´ÌṩʵÏÖ¡£Á½¸ö¹¹Ô캯ÊýÓеãÌØÊ⣬ÎÒ·¢ÏÖÎÞÂÛÖ¸¶¨ºÎÖÖµ÷ÓùæÔò£¬Éú³ÉµÄ´úÂë×ÜÊÇʹÓÃthiscallµ÷ÓùæÔò£¬¼´ÔÚecx¼Ä´æÆ÷Öд«µÝthisÖ¸Õ룬Ϊ´Ë¹¹Ô캯ÊýÐèÒªÌØÊâ´¦Àí£¬Óûã±à´úÂëÊÖ¹¤Ä£·Â__cdeclµ÷ÓùæÔòÈ¥µ÷ÓÃÔ­À´DLLÖеĺ¯Êý£¬°üÀ¨Î¬»¤Õ»Ö¸Õë¡£

ÆäÓàµÄ´úÂëÒÑ×÷ÁË×¢ÊÍ£¬Ò×ÓÚÀí½â£¬²»ÔÙ׸Êö¡£

[ Last edited by sdlj8051 on 2006-10-6 at 12:35 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ sdlj8051 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 295·ÖÇóµ÷¼Á +5 ?ÒªÉϰ¶? 2026-04-17 5/250 2026-04-17 16:51 by fenglj492
[¿¼ÑÐ] 279Çóµ÷¼Á +13 ÕÅ·¬ÇѲ»³´µ° 2026-04-11 13/650 2026-04-17 10:38 by cuisz
[ÂÛÎÄͶ¸å] ÓÐûÓнÓÊձȽϿìµÄsciÆÚ¿¯Ñ½£¬×îºÃÔÚÒ»¸öÔÂÖ®Äڵģ¬ÑÐÈýº¢×ÓÇó±ÏÒµ 20+4 Ö®»¤×Å 2026-04-16 5/250 2026-04-17 10:02 by bobvan
[¿¼ÑÐ] 291Çóµ÷¼Á +9 ¹ØÒä±±. 2026-04-14 9/450 2026-04-16 22:49 by cfdbai
[¿¼ÑÐ] 300Çóµ÷¼Á +11 ³Èa777 2026-04-15 11/550 2026-04-16 22:43 by cfdbai
[¿¼ÑÐ] 22ר˶Çóµ÷¼Á +10 haoyunÉϰ¶ 2026-04-11 12/600 2026-04-16 22:21 by Öí»á·É
[¿¼ÑÐ] »¯Ñ§070300 Çóµ÷¼Á +28 ¹þ¹þ¹þ^_^ 2026-04-12 28/1400 2026-04-16 21:36 by ´óÁ¦Ë®ÊÖÁ¦´óÎÞÇ
[¿¼ÑÐ] 22408 312Çóµ÷¼Á +23 ÃÅ·ÃþÃþ 2026-04-14 25/1250 2026-04-16 21:21 by Art1977
[¿¼ÑÐ] 291Çóµ÷¼Á +11 ¹ØÒä±±. 2026-04-14 11/550 2026-04-16 15:18 by jiahl2024
[¿¼ÑÐ] ¸´ÊÔµ÷¼Á +21 »ý¼«ÏòÉÏ£» 2026-04-10 23/1150 2026-04-15 12:50 by Î÷±±Íû¡ª·çɳ
[¿¼ÑÐ] 105500ҩѧÇóµ÷¼Á +4 x_skys 2026-04-12 4/200 2026-04-14 13:37 by rndfc
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤349·ÖÇóµ÷¼Á +16 Àîľ×Ó°¡¹þ¹þ 2026-04-12 17/850 2026-04-14 09:11 by fenglj492
[¿¼ÑÐ] ũѧ0904 312Çóµ÷¼Á +4 Say Never 2026-04-11 4/200 2026-04-14 09:10 by zs92450
[¿¼ÑÐ] BÇø0809 £¬ÊýÒ»Ó¢Ò»£¬290 Çóµ÷¼Á +3 ãöΫ1111 2026-04-12 4/200 2026-04-13 20:35 by ѧԱJpLReM
[¿¼ÑÐ] Ò»Ö¾Ô¸085802 323·ÖÇóµ÷¼Á +13 drizzle_9 2026-04-12 14/700 2026-04-13 10:26 by Faiz5552
[¿¼ÑÐ] Ò»Ö¾Ô¸Õã´óÉúÎï325·ÖÇóµ÷¼Á +9 zysheng 2026-04-12 9/450 2026-04-12 22:31 by yuyin1233
[¿¼ÑÐ] µ÷¼Á½áÊø +6 floriea 2026-04-12 8/400 2026-04-12 18:13 by zhouxiaoyu
[¿¼ÑÐ] 339Çóµ÷¼Á +8 hanwudada 2026-04-11 9/450 2026-04-12 15:36 by laoshidan
[¿¼ÑÐ] 352 Çóµ÷¼Á +6 yzion 2026-04-11 8/400 2026-04-11 16:24 by Ã÷Ô´ËʱÓÐ
[¿¼ÑÐ] Çóµ÷¼Á +3 θ¾·ÂÎÀÛÁË 2026-04-11 5/250 2026-04-11 14:13 by luhong1990
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û