²é¿´: 282  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] Ò»Ö¾Ô¸±±¾©»¯¹¤´óѧ²ÄÁÏÓ뻯¹¤ 264·Ö¸÷¿Æ¹ýAÇø¹ú¼ÒÏß +3 ¹þ¹þ157349 2026-03-21 3/150 2026-03-24 14:11 by zhyzzh
[¿¼ÑÐ] 085404µç×ÓÐÅÏ¢284·ÖÇóµ÷¼Á +4 13659058978 2026-03-24 4/200 2026-03-24 12:15 by syl20081243
[¿¼ÑÐ] 306Çó0703µ÷¼ÁÒ»Ö¾Ô¸»ªÖÐʦ·¶ +9 Ö½Óãly 2026-03-21 10/500 2026-03-24 11:36 by 544594351
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ª´ó»¯Ñ§322Çóµ÷¼Á +4 17501029541 2026-03-23 6/300 2026-03-24 10:21 by ´÷Χ²±µÄСÎÃ×Ó
[¿¼ÑÐ] ×ÊÔ´Óë»·¾³ µ÷¼ÁÉêÇë(333·Ö) +6 holy J 2026-03-21 6/300 2026-03-24 09:51 by hengsmith
[¿¼ÑÐ] Çó²ÄÁÏ£¬»·¾³×¨Òµµ÷¼Á +3 18567500178 2026-03-18 3/150 2026-03-23 23:50 by ÈÈÇéɳĮ
[¿¼ÑÐ] »¯Ñ§308·ÖÇóµ÷¼Á +3 ÄãºÃÃ÷ÌìÄãºÃ 2026-03-23 3/150 2026-03-23 20:11 by macy2011
[¿¼ÑÐ] 303Çóµ÷¼Á +4 ԪϦԪ 2026-03-20 4/200 2026-03-23 19:00 by macy2011
[¿¼ÑÐ] 328Çóµ÷¼Á +4 LHHL66 2026-03-23 4/200 2026-03-23 14:55 by lbsjt
[¿¼ÑÐ] ÉúÎïѧ071000 329·ÖÇóµ÷¼Á +5 ÎÒ°®ÉúÎïÉúÎﰮΠ2026-03-17 5/250 2026-03-22 16:42 by tcx007
[¿¼ÑÐ] ѰÕÒµ÷¼Á +4 ¾óǿâ? 2026-03-21 4/200 2026-03-22 16:14 by ľÍÐζ¶
[¿¼ÑÐ] Çóµ÷¼Á +4 ÒªºÃºÃÎÞÁÄ 2026-03-21 4/200 2026-03-21 18:57 by ѧԱ8dgXkO
[¿¼ÑÐ] Çóµ÷¼Á +3 Ma_xt 2026-03-17 3/150 2026-03-21 02:05 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÖпƼ¼´óѧ£¬080502£¬354·ÖÇóµ÷¼Á +5 ÊØºòϦÑôCF 2026-03-18 5/250 2026-03-21 01:06 by JourneyLucky
[¿¼ÑÐ] ÄϾ©´óѧ»¯Ñ§376Çóµ÷¼Á +3 hisfailed 2026-03-19 6/300 2026-03-20 23:43 by hisfailed
[¿¼ÑÐ] Ò»Ö¾Ô¸ ÄϾ©º½¿Õº½Ìì´óѧ´óѧ £¬080500²ÄÁÏ¿ÆÑ§Ó빤³Ìѧ˶ +5 @taotao 2026-03-20 5/250 2026-03-20 20:16 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸¼ªÁÖ´óѧ²ÄÁÏѧ˶321Çóµ÷¼Á +11 Ymlll 2026-03-18 15/750 2026-03-20 19:40 by ¶¡¶¡*
[¿¼ÑÐ] 086500 325 Çóµ÷¼Á +3 Áì´øÐ¡ÐÜ 2026-03-19 3/150 2026-03-20 18:38 by ¾¡Ë´Ò¢1
[¿¼ÑÐ] ²ÄÁÏѧ˶318Çóµ÷¼Á +5 February_Feb 2026-03-19 5/250 2026-03-19 23:51 by 23Postgrad
[¿¼ÑÐ] 0703»¯Ñ§µ÷¼Á +5 pupcoco 2026-03-17 8/400 2026-03-19 13:58 by houyaoxu
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û