¡¾ÎÄÕ±êÌâ¡¿: ASPr´ø¿Çµ÷ÊÔ+ÄÚ´æУÑéÍêÕû·ÖÎö+Inline Loader[Delphi¿ªÔ´]+ÓïÒôʹÓüÏó
¡¾ÎÄÕÂ×÷Õß¡¿: wynney
¡¾×÷ÕßÖ÷Ò³¡¿: http://ReverserCracker.Spaces.Live.Com
¡¾Èí¼þÃû³Æ¡¿: Tail4win 2.7
¡¾Èí¼þ´óС¡¿: 765K
¡¾Ê¹Óù¤¾ß¡¿: Delphi 7¡¢OD
¡¾ÏÂÔصØÖ·¡¿: http://74530.cn/3800hk/Files.rar
¡¾¼Ó¿Ç·½Ê½¡¿: ASProtect 2.3 SKE build 05.14 Beta
¡¾×÷ÕßÉùÃ÷¡¿: Dup2¡¢KeyMake¡¢Inline Loader¶Ô±È
--------------------------------------------------------------------------------
¡¾Ïêϸ¹ý³Ì¡¿
 
  Ò»¡¢Ç°ÑÔ

  ºÇºÇ£¬×òÌì²Å·¢ÏÖÓÐÕâô¸ö»î¶¯£¬²Î¼ÓÍæÍæ°É£¬ÖØÔÚ²ÎÓëÂ£©ÎÄÕÂÖмÈÓе÷ÊÔÓÖÓпǵķÖÎöÓÖÓбà³ÌÓÖÓй¤¾ß£¬»¹Õæ²»ÖªµÀÓ¦¸Ã·¢µ½ÄĸöÇøÈ¥

  ÏñASPrÒ»ÀàÃͿǼӿǵÄÈí¼þ»áÓÐÄÚ´æУÑ飬һ°ãµÄ²¹¶¡¹¤¾ßÖÆ×÷µÄÄÚ´æ²¹¶¡£¬Ò»ÊDZíÏֵúܲ»Îȶ¨£¬µ¼Ö²¹¶¡ÎÞЧ£¬¶þÊDZ»ASPr
  ¼ì²âµ½£¬ÌáʾProtection Error:45Ö®ÀàµÄ´íÎó
 
µ±È»ÄãÈôÏëÓÃDup2¡¢KeyMakeÀ´×öASPrµÄÄÚ´æ²¹¶¡£¬Ò²¿ÉÒÔ£¡ÄǾͻ¹ÐèÒªÌîÉ϶ã±ÜУÑéÖµµÄ²¹¶¡Êý¾Ý£¬±È½ÏÂé·³£¬µ«ÊÇÕâ¸öÏà¶ÔÓÚһЩÀÏÄñ¶øÑÔÊǺܼòµ¥µÄÊÂÁË¡£ÓÚÊÇ£¬±¾È˾ÍдÁ˸ö²¹¶¡ÖÆ×÷¹¤¾ß£¬Ö»ÐèÌîд²¹¶¡Êý¾Ý[²»ÐèҪԭʼÊý¾Ý£¬²»ÐèÒªÉèÖÃÌø¹ýУÑé]¼´¿É£¬Ò²²»»á±»ÄÚ´æУÑéµ½¡£²»×ãµÄÊÇ¿ªÓÐɱ¶¾Èí¼þ»áµ¼Ö²¹¶¡²»¹»Îȶ¨[ÔÚijЩ»úÆ÷ÉϲâÊÔÓдËÇé¿ö£¬ÎҵĻúÆ÷ÉÏȴûÓÐ]¡£
  
  
  ¶þ¡¢´ø¿Çµ÷ÊÔ

  ´ø¿Ç¶¯Ì¬µ÷ÊÔ×îÆðÂëµÄÒªÇóÊÇÄ¿±ê³ÌÐòÄܹ»ÔÚODÏÂÕý³£µÄÅܵÃÆðÀ´¡£
  
  1¡¢Î´×¢²áÆô¶¯¾ÍÓиö×¢²á¿ò
  2¡¢×¢²á¿òÉÏÌáʾ¡°You have 30 day(s) left¡±
  3¡¢¿´×¢²á·½Ê½ÊÇÖØÆôÑéÖ¤
  4¡¢¼Ù×¢²áÊÔÊÔ£¬Ìáʾ¡°Serial is not valid, please input again¡±
  
  ¼ÈÈ»Èç´Ë£¬ÎÒÃǾʹÓ×¢²á¿òÈëÊÖ
  
  5¡¢ºöÂÔ³ýÁËINT3ºÍÖ¸¶¨Òì³£Ö®ÍâµÄËùÓÐÒì³£¡¢ODÔØÈë
  6¡¢F9Á½´ÎÖжÏÔÚINT3Òì³££¬Alt+MÔÚCode¶ÎF9ÖжÏÔÚOEP
  7¡¢ËÑË÷ËùÓвο¼Îı¾×Ö·û´®
  
  Îı¾×Ö·û´®²Î¿¼Î»ÓÚ Tail4win:
  µØÖ·       ·´»ã±à                    Îı¾×Ö·û´®
  004D843C   mov edx,Tail4win.004D858  ASCII "Trial expired, please register."
  004D8448   push Tail4win.004D85A8    ASCII "You have "
  004D845E   push Tail4win.004D85BC    ASCII " day(s) left"
  004D84B5   mov edx,Tail4win.004D85D  ASCII "This copy is licensed to "
  004D84DB   push Tail4win.004D85F8    ASCII "You hava not register. This copy left "
  004D84F8   push Tail4win.004D8628    ASCII " days to use."
  004D86FD   push Tail4win.004D8724    ASCII "System Error"
  004D8702   push Tail4win.004D8734    ASCII "Form create error, please send mail to support@withdata.com!"
  004D88DA   mov edx,Tail4win.004D8A0  ASCII "can not open "
  004D8A24   push Tail4win.004D8A98    ASCII "OutputDebugString"
  004D8B82   mov edx,Tail4win.004D8C1  ASCII "\Software\withdata\tail4win\recent"
  004D8B92   mov edx,Tail4win.004D8C4  ASCII "loadlines"
  004D8B97   mov eax,Tail4win.004D8C5  ASCII "Software\withdata\tail4win"
  004D8BBA   mov edx,Tail4win.004D8C8  ASCII "editor"
  004D8BBF   mov eax,Tail4win.004D8C5  ASCII "Software\withdata\tail4win"
  004D8BE6   mov edx,Tail4win.004D8C9  ASCII "notepad"
  004D8D0D   mov edx,Tail4win.004D8D7  ASCII "This copy is licensed to "
  
  Îı¾×Ö·û´®²Î¿¼Î»ÓÚ Tail4win:
  µØÖ·       ·´»ã±à                    Îı¾×Ö·û´®
  004D2ADF   push Tail4win.004D2B40    ASCII "Registration"
  004D2AE4   push Tail4win.004D2B50    ASCII "Thank you for your registration!"
  004D2B01   push Tail4win.004D2B40    ASCII "Registration"
  004D2B06   push Tail4win.004D2B74    ASCII "Serial is not valid, please input again!"
  
  
  ´ÓÉÏÃæµÄÐÅÏ¢¿ÉÒÔ¿´³ö£¬Ò»ÊÇͨ¹ý×¢²á±íʵÏÖÖØÆôÑéÖ¤[Software\withdata\tail4win]£¬¶þÊÇÎÒÃÇÕÒµ½ÁË2ÖеÄÌáʾ
  
  8¡¢Ë«»÷004D8448À´µ½ÕâÀï,ÒòΪÊÇ´ø¿Çµ÷ÊÔ£¬ËùÓÐÎÒÃÇҪϵĶϵã±ØÐ붼ÊÇÓ²¼þ¶Ïµã¡£
  
  004D841D     E8 F6A5FFFF        call Tail4win.004D2A18           ; ÕâÀïÊǹؼüCall£¬ÏÂÓ²¼þÖ´Ðжϵã
  004D8422     84C0               test al,al                       ; ÌøתÊÇÊÜalµÄÏÞÖƵģ¬alΪ1²Å¿ÉÒÔʵÏÖÌøת
  004D8424     75 66              jnz short Tail4win.004D848C
  004D8426     8B45 F8            mov eax,dword ptr ss:[ebp-8]
  004D8429     8BB0 34030000      mov esi,dword ptr ds:[eax+334]
  004D842F     85F6               test esi,esi
  004D8431     75 15              jnz short Tail4win.004D8448
  004D8433     8B45 F8            mov eax,dword ptr ss:[ebp-8]
  004D8436     8B80 14030000      mov eax,dword ptr ds:[eax+314]
  004D843C     BA 80854D00        mov edx,Tail4win.004D8580        ; ASCII "Trial expired, please register."
  004D8441     E8 D69AF8FF        call Tail4win.00461F1C
  004D8446     EB 39              jmp short Tail4win.004D8481
  004D8448     68 A8854D00        push Tail4win.004D85A8           ; ASCII "You have "
  004D844D     8BC6               mov eax,esi
  004D844F     33D2               xor edx,edx
  004D8451     52                 push edx
  004D8452     50                 push eax
  004D8453     8D45 F0            lea eax,dword ptr ss:[ebp-10]
  004D8456     E8 910CF3FF        call Tail4win.004090EC
  004D845B     FF75 F0            push dword ptr ss:[ebp-10]
  004D845E     68 BC854D00        push Tail4win.004D85BC           ; ASCII " day(s) left"
  004D8463     8D45 F4            lea eax,dword ptr ss:[ebp-C]
  
  9¡¢ºöÂÔËùÓÐÒì³££¬ÖØмÓÔØ£¬F9ÖжÏÔÚ004D841D£¬F7½øÈë
  
  004D2A18     53                 push ebx
  004D2A19     56                 push esi
  004D2A1A     57                 push edi
  004D2A1B     83C4 F8            add esp,-8
  004D2A1E     8BF0               mov esi,eax
  004D2A20     33DB               xor ebx,ebx
  004D2A22     8D86 28030000      lea eax,dword ptr ds:[esi+328]
  004D2A28     50                 push eax
  004D2A29     8D86 24030000      lea eax,dword ptr ds:[esi+324]
  004D2A2F     50                 push eax
  004D2A30     6A 00              push 0
  004D2A32     E8 25FDFFFF        call Tail4win.004D275C
  004D2A37     8BBE 24030000      mov edi,dword ptr ds:[esi+324]
  004D2A3D     85FF               test edi,edi
  004D2A3F     74 1E              je short Tail4win.004D2A5F
  004D2A41     8BC7               mov eax,edi
  004D2A43     E8 806EF3FF        call Tail4win.004098C8
  004D2A48     85C0               test eax,eax
  004D2A4A     76 13              jbe short Tail4win.004D2A5F
  004D2A4C     54                 push esp
  004D2A4D     8D86 2C030000      lea eax,dword ptr ds:[esi+32C]
  004D2A53     50                 push eax
  004D2A54     6A 00              push 0
  004D2A56     E8 19FDFFFF        call Tail4win.004D2774
  004D2A5B     B3 01              mov bl,1                         ; Èç¹ûÕâÀïʵÏÖ,bl¾ÍÊÇ1
  004D2A5D     EB 1B              jmp short Tail4win.004D2A7A
  004D2A5F     8D86 34030000      lea eax,dword ptr ds:[esi+334]
  004D2A65     50                 push eax
  004D2A66     8D86 30030000      lea eax,dword ptr ds:[esi+330]
  004D2A6C     50                 push eax
  004D2A6D     6A 00              push 0
  004D2A6F     E8 F8FCFFFF        call Tail4win.004D276C
  004D2A74     84C0               test al,al
  004D2A76     74 02              je short Tail4win.004D2A7A
  004D2A78   33DB               xor ebx,ebx                      ; Èç¹ûÕâÀïʵÏÖ,ebx±»Çå0
  004D2A7A     8BC3               mov eax,ebx                      ; ¸³Öµ¸øeax
  004D2A7C     59                 pop ecx
  004D2A7D     5A                 pop edx
  004D2A7E     5F                 pop edi
  004D2A7F     5E                 pop esi
  004D2A80     5B                 pop ebx
  004D2A81     C3                 retn
  
  ºÜÃ÷ÏÔÕâÉÏÃæµÄ´úÂë¾ÍÏ൱ÓÚÒ»¸öifÌõ¼þÓï¾ä¡£¸ú×Ù·¢ÏÖ004D2A78±»ÊµÏÖ£¬Ò²¾ÍÊÇ˵eax»á±»¸³ÖµÎª0£¬¼´al=0£¬×ÔÈ»¾ÍÒªÇó×¢²áÁË¡£
  
  10¡¢OK£¬ÎÒÃÇÀ´¼ì²âÏ£¬¿´ÕâÀïÊÇ·ñÊÇÖØÆôÑéÖ¤µÄ¹Ø¼ü£¬É¾³ýÓ²¼þÖ´ÐжϵãºÍËùÓжϵ㣬ÔÚ004D2A7AÏÂÓ²¼þÖ´Ðжϵ㣬ÖØÔØ£¬F9
  
  ÖжϵÚ1´Î
  ebx=00000000
  eax=00000001
  ÊÖ¶¯¸ü¸ÄebxΪ1
  
  ¼ÌÐøF9
  
  ÖжϵÚ2´Î
  ebx=00000000
  eax=00000001
  ÊÖ¶¯¸ü¸ÄebxΪ1
  
  ¼ÌÐøF9
  ³ÌÐòÔËÐУ¬×¢²á¿òûÓгöÏÖ£¬OK£¬µãHelp-->About Tail4win£¬ÏÔʾ¡°This copy is licensed to¡±[×¢²á±íÀïûÓÐ×¢²áÃû]
  
  11¡¢¿´À´Õâ¸öµØ·½Êǹؼü¸ÄÖ®
  
  004D2A7A     B0 01              mov al,1                         ; ¸³Öµ1¸øal£¬eax°ÚÍÑebxµÄ¿ØÖÆ
  
  Èç¹ûÏëÈÃÆäÏÔʾע²áÃû£¬×Ô¼º¾ÍαÔì¸ö×¢²á±í°É£º£©
  
  12¡¢Ê¹ÓÃDup2ºÍKeyMakÖÆ×÷²¹¶¡·¢ÏÖ
  
  ²¹¶¡²»ÊÇÎÞЧ¾ÍÊÇÌáʾError£¬ÓÚÊDZãÓÐÁËÏÂÎÄ£º£©

  Èý¡¢ASPrÄÚ´æУÑéÍêÕû·ÖÎö
  
  ¼ÈÈ»ÉÏÃæÎÒÃÇÌáµ½ÁËASPrÄÚ´æУÑéµÄÎÊÌ⣬ÄÇôÎÒÃǾÍÒ»²¢·ÖÎöÁË°É¡£
  µÚÒ»²¿·ÖÇ°ÑÔ£¬ÎÒÃÇ˵¹ý±»¼ì²âµ½»áÌáʾProtection Error:45£¬ÄǾÍOK
  
  1¡¢ÉèÖúöÂÔ³ýÁËÄÚ´æ·ÃÎʺÍÖ¸¶¨Òì³£Ö®ÍâµÄËùÓÐÒì³£¡£F9ÔËÐУ¬ÖжÏÔÚµÚ1´ÎÄÚ´æÒì³£´¦£¬±ð¹ÜÁË
  2¡¢ËÑË÷ËùÓвο¼Îı¾×Ö·û´®
     
     Îı¾×Ö·û´®²Î¿¼Î»ÓÚ 00F70000..00FC1FFF
µØÖ·       ·´»ã±à                    Îı¾×Ö·û´®
00FAC9CB   push 0FAC9F0              ASCII "Protection Error"
00FACA9F   mov edx,0FACAFC           ASCII "90"
00FACDEF   push 0FACE14              ASCII "103"
00FAD289   push 0FAD330              ASCII "42"
00FAD4EB   push 0FAD520              ASCII "151"
00FADAED   push 0FADD50              ASCII "85"
00FADB07   push 0FADD50              ASCII "85"
00FADC87   push 0FADD60              ASCII "55"
00FADCE6   push 0FADD70              ASCII "57"
00FADD2A   push 0FADD80              ASCII "60"
00FADE83   push 0FADF18              ASCII "45"         £»Ë«»÷À´µ½´úÂë´¦
00FADEF0   push 0FADF28              ASCII "34"
00FAE4CE   push 0FAE638              ASCII "100"
00FAE5FE   add byte ptr ds:[eax],al  £¨³õʼ CPU Ñ¡Ôñ£©
00FAE6B0   push 0FAE6D4              ASCII "150"
00FAE7DC   push 0FAE84C              ASCII "170"

  3¡¢¿´µ½ÁËÉÏÃæµÄ45ºÅ´íÎóÁË°É

00FADE70     E8 A36CFDFF        call 00F84B18                    
00FADE75     8BE8               mov ebp,eax
00FADE77     892D D495FB00      mov dword ptr ds:[FB95D4],ebp
00FADE7D     3B6C24 28          cmp ebp,dword ptr ss:[esp+28]   ; ÏÈÔÚÕâÀïÏÂhe¶Ïµã
00FADE81     74 0C              je short 00FADE8F               ; Èç±»¼ì²âµ½ÕâÀï¿Ï¶¨Ã»ÓÐÌø
00FADE83     68 18DFFA00        push 0FADF18                    ; ASCII "45"
00FADE88     E8 FB79FDFF        call 00F85888

  4¡¢ÔÚ00FADE7DϺÃÓ²¼þÖ´Ðжϵãºó£¬ÎÒÃǺöÂÔËùÓÐÒì³££¬ÖØÔØ£¬F9ÔËÐÐÖжÏÔÚ00FADE7D£¬ÏÈÀ´Ì½Ì½Çé¿ö

¶ÑÕ» ss:[0012FF5C]=5E2582B0£¬ebp=5E2582B0

°´Õâ¸öÖµ±È½Ï£¬00FADE81ÊÇ»áÌøµÄ£¬ÒòΪÎÒÃÇÕâÑùµ÷ÊÔ²¢Ã»ÓÐÓ°Ïìµ½ÄÚ´æУÑéÂï¡£ÄÇô5E2582B0¾ÍÊÇÄÚ´æУÑéÖµÁË¡£OK£¬Çé¿öÃ÷ÁË
ÎÒÃÇÔÚÊý¾Ý´°ÖÐת´æÒ»ÏÂ0012FF5C¿´¿´

0012FF14  B0 82 25 5E D0 C0 06 01  °‚%^ÐÀ         £»ÕâÀïÒ²ÓÐУÑéÖµ
0012FF1C  1F 2C F7 00 55 4B F8 00  ,?UK?
0012FF24  00 10 00 00 00 80 0E 00  ....€.
0012FF2C  00 7C FB 00 75 DE FA 00  .|?uÞú.
0012FF34  00 00 00 00 00 00 40 00  ......@.
0012FF3C  00 00 00 00 00 10 00 00  .......
0012FF44  00 00 00 00 00 00 00 00  ........
0012FF4C  00 00 00 00 00 00 00 00  ........
0012FF54  00 00 00 00 00 9E 0D 00  .....?.
0012FF5C  B0 82 25 5E 00 00 00 00  °‚%^....         £»Ð£ÑéÖµ


  5¡¢ÎÒÃÇɾ³ýËùÓеĶϵã°üÀ¨¸Õ²ÅµÄÓ²¼þÖ´Ðжϵ㣬ÖØÐÂÔÚ00FADE70ÏÂÓ²¼þÖ´Ðжϵ㣬ÖØÔØ£¬F9ÖжÏÔÚ00FADE70£¬¼ÌÐø̽̽Çé¿ö

00FADE70     E8 A36CFDFF        call 00F84B18                   ; ÕâÀï¾ÍÊǼÆËãУÑéÖµµÄÁË
00FADE75     8BE8               mov ebp,eax                     ; ¸øeax·µ»Ø5E2582B0УÑéÖµ
00FADE77     892D D495FB00      mov dword ptr ds:[FB95D4],ebp   ; ebpÀïÒ²ÊÇУÑéÖµ

  6¡¢ÎÒÃÇÀ´×öÒ»¸öСʵÑ飬ÖØÔØ£¬F9

00FADE70     E8 A36CFDFF        call 00F84B18                   ; F8£¬×¢Òâ¹Û²ìת´æÖеÄ0012FF14ºÍ0012FF5C
00FADE75     8BE8               mov ebp,eax                     ; ÊÖ¶¯¸øeaxÇå0
00FADE77     892D D495FB00      mov dword ptr ds:[FB95D4],ebp   ; 0£¬0
00FADE7D     3B6C24 28          cmp ebp,dword ptr ss:[esp+28]   ; 0£¬5E2582B0
00FADE81     74 0C              je short 00FADE8F               ; Ã»Ìø£¬ÈÃÈ˸ßÐ˵ÄÔÚºóÃæ
00FADE83     68 18DFFA00        push 0FADF18                    ; ASCII "45"
00FADE88     E8 FB79FDFF        call 00F85888                   ; ÌáʾProtection Error:45

  ÐèҪעÒâµÄÊÇ£¬ÔÚÎÒÃÇÊÖ¶¯¸ü¸Äeax=0µÄʱºò£¬0012FF14ºÍ0012FF5CÀïÃæµÄÖµÊÇû±äµÄ£¬¶¼ÊÇУÑéÖµ¡£

  7¡¢OK£¬ÄÇÎÒÃÇ¿ÉÒԴ󵨵ļÙÉèÐÔ[Ò²ÊÇÓÐÊÂʵ¸ù¾ÝµÄ]·ÖÎöÒ»ÏÂ
     1)¡¢ÈôASPr¼ì²âµ½ÄÚ´æУÑ飬ÄÇô00FADE70     call 00F84B18½«»á¸øeax·µ»ØΪ0»òÕßÊdzýÁËÕýȷУÑéÖµÖ®ÍâµÄÆäËûÖµ
     2)¡¢ÈôASPrûÓмì²âµ½£¬ÄÇôһÇÐÈç³£

     ·ÖÎöÍêÁË£¬ÎÒÃǾÍÓбØÒªµ½00FADE70     call 00F84B18È¥¿´¿´ÁË

ÓеÄÅóÓÑ¿ÉÄÜ»á˵£¬ÄÇÎÒ°Ñ00FADE81¸Ä³Éjmp²»¾Í²»¹ÜʲôÇé¿ö¶¼¿ÉÒÔÌø¹ýÄÚ´æУÑéÂ𣿺Ǻǣ¬Äã²»ÒªÍüÁË£¬¿ÇÒ²ÓÐ×ÔÉíУÑéµÄ£¬ÕâÒ²ÊÇΪʲôÎÒÃÇÔÚʹÓò¹Çø¶Î·¨µÄʱºò£¬»¹ÒªÐÞ¸ÄRoute CheckµÄÔµ¹ÊÁË

Èç¹ûÔÚÄÚ´æ²¹¶¡µ±ÖÐÕâÑùÈ¥ÉèÖÃ
 
ÄÇô½«»á³öÏÖÕâÑùµÄ´íÎóÌáʾ
 

    8¡¢ÖØÔØ£¬F9£¬F7

00F84B18     53                 push ebx
00F84B19     56                 push esi
00F84B1A     57                 push edi
00F84B1B     8BFA               mov edi,edx
00F84B1D     8BF0               mov esi,eax
00F84B1F     B2 01              mov dl,1
00F84B21     A1 20F8F700        mov eax,dword ptr ds:[F7F820]
00F84B26     E8 B9E0FEFF        call 00F72BE4
00F84B2B     8BD8               mov ebx,eax
00F84B2D     8BC3               mov eax,ebx
00F84B2F     8B10               mov edx,dword ptr ds:[eax]
00F84B31     FF12               call dword ptr ds:[edx]
00F84B33     8BD6               mov edx,esi
00F84B35     8BCF               mov ecx,edi
00F84B37     8BC3               mov eax,ebx
00F84B39     8B30               mov esi,dword ptr ds:[eax]
00F84B3B     FF56 04            call dword ptr ds:[esi+4]
00F84B3E     8BC3               mov eax,ebx
00F84B40     8B10               mov edx,dword ptr ds:[eax]
00F84B42     FF52 08            call dword ptr ds:[edx+8]
00F84B45     8BC3               mov eax,ebx
00F84B47     8B10               mov edx,dword ptr ds:[eax]
00F84B49     FF52 0C            call dword ptr ds:[edx+C]
00F84B4C     8B30               mov esi,dword ptr ds:[eax]
00F84B4E     8BC3               mov eax,ebx
00F84B50     E8 BFE0FEFF        call 00F72C14                   ; ÕâÀï¸ø0012FF14¸³Ð£ÑéÖµ
00F84B55     8BC6               mov eax,esi                     ; Õý³£Çé¿öÏÂesiÀïµÄÖµÊÇУÑéÖµ
00F84B57     5F                 pop edi                         ; ÐèҪעÒâµÄÊÇÔÚÕâÕû¸ö¹ý³Ìµ±ÖÐ0012FF5CʼÖÕû±ä£¬¶¼ÊÇУÑéÖµ
00F84B58     5E                 pop esi
00F84B59     5B                 pop ebx
00F84B5A     C3                 retn

ÉÏÃæÎÒÃÇ·ÖÎöÁË£¬Í¨¹ý¸ÄÌøתÊÇÐв»Í¨µÄ£¬µ÷ÊÔ·¢ÏÖcall 00F84B18ÀïÃæµÄÖµÊDz»»á±»¼ì²âµÄ

 9¡¢ÖØÔØ£¬F9£¬F7£¬ÐÞ¸ÄÖ®

00F84B18     8B4424 2C          mov eax,dword ptr ss:[esp+2C]   ; [esp+2C]=0012FF5C
00F84B1C     C3                 retn                            ; »ØÈ¥°É
00F84B1D     8BF0               mov esi,eax
00F84B1F     B2 01              mov dl,1
00F84B21     A1 20F8F700        mov eax,dword ptr ds:[F7F820]

¼´´Ó00F84B18¿ªÊ¼µÄԭʼÊý¾Ý
53 56 57 8B FA
¸ÄÖ®
8B 44 24 2C C3
 

ÔÚDup2»òÕßkeymakeÀïÃæÕâÑùÉèÖÃÖ®ºó£¬¾Í²»»á±»¼ì²âµ½ÁË£¬µ«»áÓÐ1%µÄ²»Îȶ¨ÐÔ£¬ºÇºÇ£¬´ø¿ÇµÄÄÚ´æ²¹¶¡»ù±¾É϶¼»áÓöµ½ÕâÑùµÄÎÊÌâ¡£

ºÃÀ²£¬µ½´ËΪֹ£¬ASPrµÄÄÚ´æУÑéËãÊÇ·ÖÎöÍêÁË¡£
  
  ËÄ¡¢²¹¶¡¹¤¾ßµÄ¹¦ÄÜ
  
               ¹¦ÄÜ  £º 
               1¡¢¿ÉÒÔ¸ù¾ÝÓû§ÊäÈëµÄÊý¾ÝÐÅÏ¢£¬Éú³ÉÏà¶ÔÓ¦µÄ²¹¶¡ 
               2¡¢Ö§³ÖÓû§¶ÔÊý¾ÝµÄÌí¼Ó¡¢Ð޸ġ¢É¾³ý¹¦ÄÜ 
               3¡¢Ë«»÷ÒªÐ޸ĵÄÊý¾Ý¼´¿É¶ÔÔ­Êý¾Ý½øÐб༭ 
               4¡¢Ö§³ÖÊý¾ÝÅÅÐò¹¦ÄÜ£¬Óû§Ö»ÐèÍÏÒ·ÏàÓ¦Êý¾Ý¼´¿É
               5¡¢Ö§³Ö×Ô¶¯Ìí¼ÓÁ¬ÐøÊý¾Ý¹¦ÄÜ
               6¡¢Ö§³Ö²é¿´´°ÌåÃû¹¦ÄÜ
               7¡¢Ö§³Ö¹¤³ÌÎļþ±£´æ¡¢´ò¿ª¹¦ÄÜ
               8¡¢Ôö¼ÓÁËÄ¿±êÎļþÍÏÒ·¹¦ÄÜ
               9¡¢Ôö¼ÓÁ˹¤³ÌÎļþÍÏÒ·¹¦ÄÜ
               10¡¢Ôö¼ÓÁË´°Ì岶׽¹¦ÄÜ
               11¡¢Ôö¼ÓÁËÓû§¸öÈËÐÅÏ¢ÉèÖÃ
               ºóÆÚ¸üУº
               1¡¢Ôö¼Ó²¹¶¡³ÌÐòºÍÔ­³ÌÐòÕûºÏΪһ¸ö³ÌÐò¹¦ÄÜ
               2¡¢Ôö¼Ó¶à¸öÁ¬ÐøÊý¾ÝµÄÖ§³Ö
               3¡¢Ôö¼Ó²¹¶¡ÑùʽµÄÑ¡Ôñ
               ÆäËûÌص㣺
               1¡¢Ë®ÎÆЧ¹û
               2¡¢ÎÞ±êÌâÀ¸ÍÏҷЧ¹û
  
  ÎªÁ˳ÌÐòµÄÃÀ»¯µÈÒòËØ£¬Ê¹ÓÃÁË´óÁ¿µÄµÚ3·½¿Ø¼þ
  ¹ØÓÚ²¹¶¡¹¤¾ßµÄÑÝʾÇë¿´ÑÝʾ¼Ïó
  
 ½¨Ò飺×îºÃ²»ÒªÊ¹Óá°Óû§¸öÈËÐÅÏ¢ÉèÖá±£¬ÒòΪÕâÑù»áÓ°Ïìµ½²¹¶¡µÄÆô¶¯Ëٶȡ£

  Îå¡¢¼¸¿î²¹¶¡¹¤¾ßµÄ¶Ô±È
  
  ¼¸¿î²¹¶¡¹¤¾ßµÄ¶Ô±È¿ÉÒÔ¿´ÑÝʾ¼Ïó£¬Ò»¿´¾ÍһĿÁËÈ»£º£©
  
  Áù¡¢²¹¶¡¹¤¾ßÔ­Àí

  ¾ÍÄ¿Ç°Á÷Ðеļ¸ÖÖ²¹¶¡¹¤¾ßÀ´¿´£¬¶¼ÊÇʹÓÃͨ¹ý²éÕÒ½ø³ÌÃûÀ´¶¨Î»Ä¿±ê³ÌÐò£¬ÔÙͨ¹ýÄ¿±êµØÖ·ÀûÓÃԭʼÊý¾Ý¶Ô±ÈÀ´
  ½øÐÐPatch²¹¶¡Êý¾Ý¡£È»ºó¾­¹ý±¾È˲âÊÔ·¢ÏÖ£¬¶Ô¸¶ÏñASPrÒ»ÀàµÄͨ¹ýÄÚ´æУÑéÀ´Íê³É·´Loader¹¦ÄܵĿǶøÑÔ£¬´Ë·½·¨»á±»¼ì²âµ½¡£
  ÓÚÊDZ¾ÈËת»»ÁËÖÖ·½Ê½¿´ÏÂÎÄ

  
  Ö÷³ÌÐò²¿·Ö£º°ÑÊÂÏÈдºÃµÄ²¹¶¡Ä£¿éÒÔ×ÊÔ´ÐÎʽ¼ÓÈëµ½Ö÷³ÌÐòÖУ¬¸ù¾ÝÓû§ÌîдµÄ²¹¶¡ÐÅÏ¢Éú³ÉÒ»¸öiniÎļþ£¬È»ºó°ÑiniÎļþ
  À¦°óµ½ÊͷŵIJ¹¶¡Ä£¿éĩβ,ËùÒÔÓÃPEID¸ø²¹¶¡²é¿ÇÊÇBorland Delphi 6.0 - 7.0 [Overlay]
  
  ²¹¶¡²¿·Ö£º²¹¶¡³ÌÐòÊÍ·ÅÀ¦°óÔÚĩβµÄiniÎļþ£¬ÔÙ¶ÁÈ¡iniÎļþÄÚµÄÐÅÏ¢¶ÔÄ¿±ê³ÌÐò½øÐв¹¶¡¡£ ±¾²¹¶¡ÊÇͨ¹ý´°Ìå
  Ãû¶¨Î»Ä¿±ê³ÌÐò²¢·Ç³£¹æ²¹¶¡¹¤¾ßÄÇÑùʹÓõÄÊǽø³ÌÃûÀ´¶¨Î»£¬ÕâÑù¾Í»ù±¾¿ÉÒÔÌÓ¹ý¿ÇµÄÄÚ´æ¼ì²âÁË¡£ 

  
  ¾­²âÊÔ£¬Èô¿ªÓÐɱ¶¾Èí¼þ£¬»áµ¼Ö³öÏÖDup2ºÍKeyMakeÒ»ÑùµÄ²»Îȶ¨Çé¿ö£¬µ«ÊÇ£¬²»»áÓдíÎóÌáʾ
  
  Æß¡¢Ô´Âë
  
ÏÈ¿´ÏÂÁ÷³Ìͼ°É
 
  Ö÷³ÌÐòÔ´Âë
  

ÒýÓÃ: unit Unit1;
  
  interface
  
  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, SUIForm, StdCtrls, SUIButton, SUIEdit, XPMan,
    CnWaterImage, SUIMemo, jpeg, ComCtrls, SUIStatusBar, SUISideChannel,
    CheckLst, EnhListView, Inifiles, ShellAPI, About, SUIListView, FindWindow,
    SUIImagePanel, SUIGroupBox;
  
  type
    TForm1 = class(TForm)
      XPManifest1: TXPManifest;
      Mac: TsuiForm;
      GroupBox1: TGroupBox;
      CnWaterImage1: TCnWaterImage;
      NameTxt: TsuiEdit;
      TitileTxt: TsuiEdit;
      Generent: TsuiButton;
      Exit: TsuiButton;
      Label1: TLabel;
      Label2: TLabel;
      suiStatusBar1: TsuiStatusBar;
      OpenDialog1: TOpenDialog;
      SaveDialog1: TSaveDialog;
      look: TsuiButton;
      GroupBox2: TGroupBox;
      Addr: TsuiEdit;
      Data: TsuiEdit;
      Add: TsuiButton;
      Modify: TsuiButton;
      Del: TsuiButton;
      Label5: TLabel;
      Label6: TLabel;
      about : TsuiButton;
      grp1: TGroupBox;
      mmo1: TsuiMemo;
      View: TsuiButton;
      Open: TsuiButton;
      Save: TsuiButton;
      dlgOpen1: TOpenDialog;
      dlgSave1: TSaveDialog;
      DataList: TsuiListView;
      Get: TsuiButton;
      InfoGroup: TsuiGroupBox;
      InfoMemo: TsuiMemo;
      procedure ExitClick(Sender: TObject);
      procedure lookClick(Sender: TObject);
      procedure AddClick(Sender: TObject);
      procedure DelClick(Sender: TObject);
      procedure DataListDblClick(Sender: TObject);
      procedure ModifyClick(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      procedure GenerentClick(Sender: TObject);
      procedure DataListDragDrop(Sender, Source: TObject; X, Y: Integer);
      procedure DataListDragOver(Sender, Source: TObject; X, Y: Integer;
        State: TDragState; var Accept: Boolean);
      procedure AboutClick(Sender: TObject);
      procedure ViewClick(Sender: TObject);
      procedure SaveClick(Sender: TObject);
      procedure OpenClick(Sender: TObject);
      procedure GetClick(Sender: TObject);
      procedure CnWaterImage1MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure MacMouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure InfoGroupMouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure GroupBox2MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure GroupBox1MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
      procedure grp1MouseDown(Sender: TObject; Button: TMouseButton;
        Shift: TShiftState; X, Y: Integer);
    private
    DragItem,TargetItem:TListItem;
    procedure WMDropFiles(var Msg: TWMDropFiles);message WM_DROPFILES;
    function ExtractRes(ResType,Resname,ResNewName:string):boolean;
      { Private declarations }
    public
      { Public declarations }
    end;
  
  var
    Form1: TForm1;
    Inifile:TInifile;
    FilePath:String;
  
  
  implementation
  
  {$R *.dfm}
  {$R Loader.RES}   //²¹¶¡Ä£¿éÒÔ×ÊÔ´ÎļþµÄÐÎʽ±£´æ
  
  procedure TForm1.ExitClick(Sender: TObject);
  begin
  Application.Terminate;
  end;
  
  procedure TForm1.lookClick(Sender: TObject);   //ä¯ÀÀ°´Å¥
  Var
  i,j:Integer;
  begin
  if OpenDialog1.Execute then
    begin
     NameTxt.Text:=OpenDialog1.FileName;
    end;
     FilePath:=NameTxt.Text;
     j:=Length(FilePath);
    for i:=0 to j do
        if Copy(FilePath,i,1)='' then
          begin
           NameTxt.Text:=Copy(FilePath,i+1,j-i);   //»ñÈ¡³ÌÐòÃû
          end;
  end;
  
  procedure TForm1.AddClick(Sender: TObject);   //Ìî¼Ó°´Å¥
  var
  tempItem:TListItem;
  i,j:Integer;
  S,S1:String;
  begin
  S1:=Data.Text;
  
  if Addr.text='' then
   begin
    Addr.SetFocus;
   end
   else
   begin
    if Data.Text='' then
     begin
      Addr.SetFocus;
     end
     else
     begin
    if Length(Addr.Text)=6 then
     begin
       Addr.Text:='00' + Addr.Text;
     end;
  j:= Length(Addr.Text);
  S:= Addr.Text;
  Addr.Text:='';
  for i:=0 to j do
   begin
  Addr.Text:=Addr.Text + UpperCase(Copy(S,i+1,1));
   end;
  tempItem:=DataList.Items.Add;
  tempItem.Caption:='$' + Addr.text;
  
  j:=Length(S1);
  S:='';
   for i:=0 to j  do    //Êý¾Ýת»»³É´óд
    begin
       S:=S + UpperCase(Copy(Data.Text,i+1,1));
    end;
  S1:=S;
  
  j:=Length(S1);
  S:='$' + Copy(S1,1,2);
  tempItem.SubItems.Add(S);
  Data.Text:=Copy(S1,3,j);
  
  S:=IntToStr(StrToInt('$' + Addr.Text)+1);
  Addr.Text:=Format('%x',[StrToInt(S)]);
    if Length(Addr.Text)=6 then
     begin
      Addr.Text:='00' + Addr.Text;
     end;
   end;
   end;
  end;
  
  
  procedure TForm1.DelClick(Sender: TObject); //ɾ³ý°´Å¥
  var
  tempItem:TListItem;
    begin
      tempItem:=DataList.Selected;
      if (assigned(tempItem)) or (tempItem<>nil) then
        begin
          tempItem.Delete;
        end;
    end;
  
  procedure TForm1.DataListDblClick(Sender: TObject);     //Êý¾ÝË«»÷ʼþ
  begin
  if DataList.Selected<>nil then
    begin
  Addr.Text:=Copy(DataList.Selected.Caption,2,8);
  Data.Text:=Copy(DataList.Selected.SubItems[0],2,2);
  DataList.Selected.Delete;
    end
    else
  DataList.SetFocus;
  end;
  
  
  procedure TForm1.ModifyClick(Sender: TObject);  //Ð޸İ´Å¥
  var
  tempItem:TListItem;
  begin
  tempItem:=DataList.Items.Add;
  tempItem.Caption:='$' + Addr.text;
  tempItem.SubItems.Add('$' + Data.Text);
  Addr.Clear;
  Data.Clear;
  end;
  
  procedure TForm1.FormCreate(Sender: TObject);  //½çÃæÆô¶¯Ê¼þ
  begin
  DragAcceptFiles(Handle, True);     //ÍÏÒ·
  DataList.DragMode  :=  dmAutomatic;
  DataList.GridLines:=True;
  end;
  
  procedure TForm1.GenerentClick(Sender: TObject);  //Éú³É°´Å¥
  var
  File1,File2:TFileStream;
  Size:integer;
  Files:string;
  eXeFileName: string;
  i,j:Integer;
  AppzName,TitleName,MyInfo,LeftName :string;
  aPos:Integer;
  begin
  AppzName :=NameTxt.Text;     //È¡Ä¿±êÃû
  TitleName :=TitileTxt.Text;  //È¡±êÌ⣬²éÕÒ´°¿Ú
  MyInfo:=InfoMemo.Text;       //»ñÈ¡¸öÈËÐÅÏ¢
  
  aPos:=Pos('.',AppzName);
  LeftName:=Copy(AppzName,1,aPos-1);
  SaveDialog1.FileName:=LeftName + ' - ' + 'Loader.eXe';
  
  if SaveDialog1.Execute then
     begin
  eXeFileName := SaveDialog1.FileName;
  
   if (AppzName = '') or (TitleName = '') then
       begin
           NameTxt.SetFocus;
       end
       else
       begin
  ExtractRes('exefile','myexe',eXeFileName);   //ÊÍ·Å×ÊÔ´
  IniFile:=TIniFile.Create(ExtractFilePath(paramstr(0))+'Config.ini');  //Éú³ÉÅäÖÃINIÎļþ
  
  IniFile.WriteString('Appz','AppzName',AppzName);  //дINI
  IniFile.WriteString('Appz','TitleName',TitleName);
  IniFile.WriteString('Info','MyInfo',MyInfo);
  
  j:= DataList.Items.Count -1 ;    //Êý¾ÝµÄ¸öÊý£¬´òËã´Ó0¿ªÊ¼Ë㣬Ëì-1
  IniFile.WriteString('Nume','Number',IntToStr(j));
  
   for i:=0 to j do     //Öð¸öÌî¼Ó
    begin
  IniFile.WriteString('Data','Address' + IntToStr(i),DataList.Items.Item[i].Caption);
  IniFile.WriteString('Data','NewData' + IntToStr(i),DataList.Items.Item[i].SubItems[0]);
    end;
  IniFile.Free;  
  Files:=ExtractFileDir(Application.ExeName)+'\Config.ini';
  File1:=TFileStream.Create(SaveDialog1.FileName,fmOpenWrite);
  File2:=TFilestream.Create(Files,fmOpenRead);
  
    try
  File1.Seek(0,soFromEnd);   //À¦°ó
  File1.CopyFrom(File2,0);
  Size:=File2.Size+SizeOf(Size);
  File1.WriteBuffer(Size,SizeOf(Size));
    Finally
  File1.Free;
  File2.Free;
  DeleteFile(Files);
   end;
   end;
   end;
  end;
  
  function TForm1.ExtractRes(ResType, Resname,ResNewName: string): boolean;  //×ÊÔ´Êͷź¯Êý
  var
  res:TresourceStream;
  begin
  try
      Res:=Tresourcestream.Create(Hinstance,Resname,Pchar(ResType));
      try
          Res.SaveToFile(Resnewname);
          Result:=True;
      except
          Result:=False;
      end
      Finally
        Res.Free;
      end;
  end;
  
  procedure TForm1.DataListDragDrop(Sender, Source: TObject; X, Y: Integer);  //Êý¾ÝλÖý»»»ÍÏҷʼþ
  var  
     TargetIndex:  integer;  
  begin  
     DragItem  :=  DataList.Selected;
     TargetIndex  :=  DataList.DropTarget.Index;
     if  TargetIndex>DragItem.Index  then  
     TargetItem:=DataList.Items.Insert(TargetIndex+1)
     else  TargetItem:=DataList.Items.Insert(TargetIndex);
     TargetItem.Assign(DragItem);  
     DragItem.Delete;  
  end;
  
  procedure TForm1.DataListDragOver(Sender, Source: TObject; X, Y: Integer;  //Êý¾ÝλÖý»»»ÍÏҷʼþ
    State: TDragState; var Accept: Boolean);
  begin
     if  Source=DataList  then  accept  :=true;
  end;  
   
  
  
  procedure TForm1.AboutClick(Sender: TObject);  //µ÷ÓùØÓÚ´°¿Ú
  begin
  Form2.ShowModal;
  end;
  
  procedure TForm1.ViewClick(Sender: TObject);  //²é¿´°´Å¥
  var
    hCurrentWindow: HWnd;
    szText: array[0..254] of char;
  begin
  
    hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
   while hCurrentWindow <> 0 do
    begin
     if GetWindowText(hCurrentWindow, @szText, 255)>0 then
      mmo1.Lines.Add(StrPas(szText));
      hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
     end;
  end;
  
  procedure TForm1.SaveClick(Sender: TObject);  //±£´æ°´Å¥
  var
    i,j,aPos:Integer;
    AppzName,TitleName,MyInfo,LeftName :string;
  begin
  AppzName :=NameTxt.Text;     //È¡Ä¿±êÃû
  TitleName :=TitileTxt.Text;  //È¡±êÌ⣬²éÕÒ´°¿Ú
  MyInfo:=InfoMemo.Text;       //»ñÈ¡¸öÈËÐÅÏ¢
  
  aPos:=Pos('.',AppzName);
  LeftName:=Copy(AppzName,1,aPos-1);
  dlgSave1.FileName:=LeftName + '-' + 'Project.o¦Ï§°';
  if dlgSave1.Execute then
            begin
  IniFile:=TIniFile.Create(dlgSave1.FileName);
  
  IniFile.WriteString('Appz','FilePath',FilePath);
  IniFile.WriteString('Appz','AppzName',AppzName);
  IniFile.WriteString('Appz','TitleName',TitleName);
  IniFile.WriteString('Info','MyInfo',MyInfo);
  
  j:= DataList.Items.Count -1 ;
  Inifile.WriteString('Nume','Number',IntToStr(j));
  
  for i:=0 to j do
    begin
  IniFile.WriteString('Data','Address' + IntToStr(i),DataList.Items.Item[i].Caption);
  IniFile.WriteString('Data','NewData' + IntToStr(i),DataList.Items.Item[i].SubItems[0]);
    end;
  IniFile.Free;
  
  end;
  end;
  
  
  procedure TForm1.OpenClick(Sender: TObject);   //´ò¿ª°´Å¥
  var
    TempItem:TListItem;
    Inifile:Tinifile;
    i,j:Integer;
  begin
  if dlgOpen1.Execute then
     begin
  IniFile:=TIniFile.Create(dlgOpen1.FileName);
  
  FilePath:=Inifile.ReadString('Appz','FilePath','');
  NameTxt.Text:=PChar(Inifile.ReadString('Appz','AppzName',''));
  TitileTxt.text:= Inifile.ReadString('Appz','TitleName','');
  InfoMemo.lines.Add(Inifile.ReadString('Info','MyInfo',''));
  
  j:=StrToInt(Inifile.ReadString('Nume','Number',''));
  
  
  for i:=0 to j do
   begin
     TempItem:=DataList.Items.Add;  //ÿ´ÎÌí¼Ó±ØÐëµ÷ÓÃÒ»´ÎµÄ
     TempItem.Caption:=Inifile.ReadString('Data','Address'  + IntToStr(i),'');
     TempItem.SubItems.Add(Inifile.ReadString('Data','NewData'  + IntToStr(i),''));
   end;
  IniFile.Free;
    end;
  end;
  
  procedure Tform1.WMDropFiles(var Msg: TWMDropFiles);
  var
    CFileName: array[0..MAX_PATH] of Char;
    aPos,k,l,m,n:Integer;
    TempItem:TListItem;
    Inifile:Tinifile;
  begin
    try
      if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then
      begin
  //      CheckFileSave;
        NameTxt.text:=CFileName;
        FilePath:=CFileName;
  
  //¿ªÊ¼ÅжÏÊÇexe»¹ÊÇo¦Ï§°ÎļþÁË
        aPos:=Pos('.',NameTxt.text);   //¶¨Î».µÄλÖÃ
       if Copy(CFileName,aPos,4)='.exe' then   //¹æ¶¨exe
         begin
           l:=Length(FilePath);
             for k:=0 to l do
              if Copy(FilePath,k,1)='' then
                begin
                  NameTxt.Text:=Copy(FilePath,k+1,l-k);
                  Msg.Result := 0;
                end
                  else
                  begin
                   Msg.Result := 1;
                  end;
         end
         else
         begin
          if Copy(CFileName,aPos,6)='.o¦Ï§°' then   //¹æ¶¨ini²Å¿ÉÒÔ
           begin
            IniFile:=TIniFile.Create(CFileName);
            FilePath:=Inifile.ReadString('Appz','FilePath','');
            NameTxt.Text:=PChar(Inifile.ReadString('Appz','AppzName',''));
            TitileTxt.text:= Inifile.ReadString('Appz','TitleName','');
            InfoMemo.Lines.Add(Inifile.ReadString('Info','MyInfo',''));
            n:=StrToInt(Inifile.ReadString('Nume','Number',''));
           for m:=0 to n do
            begin
              TempItem:=DataList.Items.Add;  //ÿ´ÎÌí¼Ó±ØÐëµ÷ÓÃÒ»´ÎµÄ
              TempItem.Caption:=Inifile.ReadString('Data','Address'  + IntToStr(m),'');
              TempItem.SubItems.Add(Inifile.ReadString('Data','NewData'  + IntToStr(m),''));
            end;
            Msg.Result := 0;
            IniFile.Free;
         end;
       end;
     end;
    finally
      DragFinish(Msg.Drop);
    end;
  end;
  
  procedure TForm1.GetClick(Sender: TObject);      //µ÷ÓÃFindWindowµ¥Ôª£¬²¶×½´°Ìå°´Å¥£¬ÒªÓõ½Ã¶¾Ù
  var
    PI:TProcessInformation;
    SI:TStartUpInfo;
    MyHandle:THandle;
    TitleInfo: String;
  begin
  if NameTxt.Text='' then
   begin
    NameTxt.SetFocus;
   end
   else
   begin
    ZeroMemory(@SI, SizeOf(SI));
    ZeroMemory(@PI, SizeOf(PI));
    SI.cb := SizeOf(SI);
    if CreateProcess(nil,PChar(FilePath), nil, nil, FALSE, 0 ,nil,nil, SI, PI) then
      begin  //×¢Òâ!
      WaitForInputIdle(PI.hProcess, INFINITE);
      MyHandle := FindMainWindow(PI.dwProcessID);
       if MyHandle > 0 then
          begin
            SetLength(TitleInfo, 255);
            GetWindowText(MyHandle, PChar(TitleInfo), 255);
            SetLength(TitleInfo, StrLen(PChar(TitleInfo)));
            TitileTxt.Text:=TitleInfo;
          end;
     TerminateProcess(PI.hProcess,0);
     TerminateProcess(PI.hThread,0);
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
      end;
   end;
  end;
  
  procedure TForm1.CnWaterImage1MouseDown(Sender: TObject;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.MacMouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.InfoGroupMouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.GroupBox2MouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.GroupBox1MouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  procedure TForm1.grp1MouseDown(Sender: TObject; Button: TMouseButton;  //ÎÞ±êÌâÀ¸ÍÏҷʼþ
    Shift: TShiftState; X, Y: Integer);
  begin
  if Button = mbLeft then
      begin
       ReleaseCapture();
       SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION, 0);
      end;
  end;
  
  end.

  
  ²¹¶¡Ä£¿éÔ´Âë
  
ÒýÓÃ: //Loader by wynney
  
  program loader;
  
  
  uses
    ShellApi,Windows,Inifiles,SysUtils,Messages,Variants,Classes,Graphics,
    Controls,ExtCtrls,StdCtrls,Dialogs,Forms,Kill in 'Kill.pas';
  
  {$R Loader.RES}
  
  
  Var
  WindowName : integer;
  ProcessId : integer;
  ThreadId : integer;
  Buf : PChar;
  HandleWindow : integer;
  Handle : integer;
  Write : Cardinal;
  Buf1 : integer;
  Appz: Pchar;
  WindowTitle : Pchar;
  Address : Cardinal;
  PokeValue : Cardinal;
  NumberOfBytes : Cardinal;
  Inifile:Tinifile;//INI
  Files:string;//ÅäÖÃÎļþ
  Des:TFileStream;//×ÊÔ´
  size:integer;//×ÊÔ´´óС
  FileMemo:TMemorystream;//ÎļþÄÚ´æÁ÷¶ÔÏó
  s:TStrings;
  i,j:Cardinal;
  Info:String;
  
  
  Var
  Str: String;
  Len:Byte absolute Str;
  
  
  
  begin
  Files:=ExtractFilePath(Application.ExeName) + '\Config.ini';  //ÊÍ·ÅÅäÖÃÎļþ
  FileMemo:=TMemoryStream.Create;
  Des:=TFileStream.Create(Application.ExeName,fmShareDenyNone);
  
  try
  des.Seek(-sizeof(size),soFromEnd);
  des.ReadBuffer(size,sizeof(size));
  des.Seek(-Size,soFromEnd);
  FileMemo.CopyFrom(Des,size-sizeof(size));
       if FileExists(Files)=False then       //ÈôÅäÖÃÎļþÒѴ棬ÔòÈ¡ÏûÊÍ·Å
         begin
           FileMemo.SaveToFile(Files);
         end;
  finally
  FileMemo.Free;
  des.Free;
  end;
  Inifile:=Tinifile.Create(Files);
  s:=TStringlist.Create;
  IniFile.ReadSections(s);
  
  SetFileAttributes(Pchar(Files),FILE_ATTRIBUTE_HIDDEN+FILE_ATTRIBUTE_SYSTEM);
  
  Info:= Inifile.ReadString('Info','MyInfo','');
  WindowTitle:= PChar(Inifile.ReadString('Appz','TitleName',''));
  Appz:=PChar(Inifile.ReadString('Appz','AppzName',''));
  j:=StrToInt(Inifile.ReadString('Nume','Number',''));
  
   if Info <> '' then
     begin
      if   Application.MessageBox(PChar(Info),'ÓѺÃÌáʾ',MB_YESNO+MB_IconQuestion)=   mrNO   then Exit;
     end;
  
  ShellExecute(Handle,PChar('Open'),Appz,nil,Appz,SW_SHOWNORMAL); //Òª´ò¿ªµÄÄ¿±ê³ÌÐò
  
  //¿ªÊ¼Loader
  
  for Buf1:=0 to 999999 do   //¶à´Î²éÕÒ
   begin
    WindowName := FindWindow(nil,WindowTitle);
     if WindowName = 0 then
       begin
         WindowName := FindWindow(nil,WindowTitle);
             if Buf1 = 999999 then 
                begin
                   ShowMessage('³ÌÐòÒì³££¬ÇëÖØÆô£¡');
                   Exit;     //Í˳ö²¹¶¡
                   KillTask(Appz);     //ɱËÀÄ¿±ê½ø³Ì
                end;
       end
       else
       begin
            ThreadId := GetWindowThreadProcessId(WindowName,@ProcessID);
            HandleWindow := OpenProcess(Process_All_Access,False,ProcessId);
  
            for i:=0 to j do
                begin
                Address :=StrToInt(Inifile.ReadString('Data','Address'  + IntToStr(i),''));  //¶ÁÈ¡Êý¾Ý
                PokeValue:=StrToInt(Inifile.ReadString('Data','NewData'  + IntToStr(i),'')); //¶ÁÈ¡Êý¾Ý
  
                NumberOfBytes:= 1;
                GetMem(Buf,1);
                Buf^ := Chr(PokeValue);
                WriteProcessMemory(HandleWindow,Ptr(Address),Buf,NumberOfBytes,Write);
                end;
                DeleteFile(Files);         //ÓÃÍêÖ®ºóÂíÉÏɾ³ý
                Exit;                      //×Ô¼ºËæºóÍ˳ö
       end;
   end;
  end.

  
  Kill£¨É±½ø³Ì£©Ä£¿éÔ´Âë
  
ÒýÓÃ: unit Kill;
  
  interface
  
  uses
    Windows, SysUtils, Variants, Classes, Graphics, StdCtrls, Tlhelp32;
  
   function KillTask(ExeFileName: string): integer;
   
  implementation
  
  function KillTask(ExeFileName: string): integer;  //ɱËÀ½ø³ÌµÄº¯Êý£¬À´¶Ô¸¶·À»ðǽ½ø³Ì¡£
  const
    PROCESS_TERMINATE=$0001;  //½ø³ÌµÄPROCESS_TERMINATE·ÃÎÊȨÏÞ
  var
    ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
  begin
    result:= 0;
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    //»ñȡϵͳËùÓнø³Ì¿ìÕÕ
    FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
    //µ÷ÓÃProcess32FirstÇ°ÓÃSizeof(FProcessEntry32)Ìî³äFProcessEntry32.dwSize
    ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
    //»ñÈ¡¿ìÕÕÖеÚÒ»¸ö½ø³ÌÐÅÏ¢²¢±£´æµ½FProcessEntry32½á¹¹ÌåÖÐ
    while integer(ContinueLoop) <> 0 do
    //Ñ­»·Ã¶¾Ù¿ìÕÕÖÐËùÓнø³ÌÐÅÏ¢
    begin
      if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(ExeFileName))
          or (UpperCase(FProcessEntry32.szExeFile)=UpperCase(ExeFileName))) then
      //ÕÒµ½ÒªÖÐÖ¹µÄ½ø³ÌÃû
         Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
                   FProcessEntry32.th32ProcessID), 0));
       //ÖÐÖ¹½ø³Ì
         ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
       //²éÕÒÏÂÒ»¸ö·ûºÏÌõ¼þ½ø³Ì
    end;
  end;
  end.


×îºó¸½ÉÏDup2¡¢KeyMake²¹¶¡Ä£¿é·¶Àý, ¾­±¾È˵÷ÊÔ´ËÔ´Âë¶Ô±¾ÎÄÄ¿±ê³ÌÐò²¹¶¡ÎÞЧ[ÒòΪ¿ÇµÄÔµ¹Ê]£¬´ó¼Ò¿É×ö²Î¿¼
ÒýÓÃ:

program Loader;

uses
  Windows,TlHelp32;

const
  OldData : array[0..1] of byte = ($8B,$C3);
  NewData : array[0..1] of byte = ($B0,$01);

var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  BytesRead : DWORD;
  TmpData : array[0..1] of Byte;

begin
  ZeroMemory(@StartInfo, SizeOf(TStartupInfo));
  StartInfo.cb := SizeOf(TStartupInfo);
  if not CreateProcess(nil,'Tail4win.exe', nil, nil, False, Create_Suspended, nil, nil, StartInfo, ProcInfo) then Exit;
  ReadProcessMemory(ProcInfo.hProcess,Pointer($004D2A7A),@TmpData,2,BytesRead);
  if (TmpData[0] = OldData[0]) and (TmpData[1] = OldData[1]) then
  begin
    if WriteProcessMemory(ProcInfo.hProcess, Pointer($004D2A7A), @NewData, 2, BytesRead) then
      MessageBox(0,'¹§Ï²²¹¶¡³É¹¦',nil,0) else MessageBox(0,'²¹¶¡Ê§°Ü',nil,0);
  end else
  begin
    MessageBox(0,'²¹¶¡Ê§°Ü',nil,0)
  end;
  ResumeThread(ProcInfo.hThread);
  CloseHandle(ProcInfo.hProcess);
  CloseHandle(ProcInfo.hThread);
end.


--------------------------------------------------------------------------------
¡¾¾­Ñé×ܽ᡿
  1¡¢Èç¹û°Ñ²¹¶¡ºÍÔ­Ä¿±ê³ÌÐòÕûºÏΪһ¸öÓ¦ÓóÌÐò£¬ÄÇô¾Í¸ü¼ÓÍêÃÀÁË£¬¿ÉϧÏÖÆÚ»¹Ã»Ê±¼äȥд£¬¿ÉÒÔÀûÓÃÀ¦°óµÄ˼Ï룬ÓÐÐË
  È¤µÄÅóÓÑ¿ÉÒÔ¼ÌÐø£º£©
  2¡¢¸öÈ˾õµÃ´ø¿Çµ÷ÊÔÒѾ­ÊDz»¿É×èµ²µÄÇ÷ÊÆÁË£¬´ó¼Ò¿ÉÒԶ໨µã¹¤·òÔÚÉÏÃ棺£©
  3¡¢Ð»¾øÓÃÐIJ»Á¼µÄÈËתÔØÔ´Âë
  4¡¢ÎÄÕÂÓе㳤£¬¸ÐлÄãÄÍÐÄ¿´Í꣺£©
--------------------------------------------------------------------------------
¡¾°æȨÉùÃ÷¡¿: ±¾ÎÄÔ­´´ÓÚ¿´Ñ©¼¼ÊõÂÛ̳, ×ªÔØÇë×¢Ã÷×÷Õß²¢±£³ÖÎÄÕµÄÍêÕû, Ð»Ð»!