吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7587|回复: 8
收起左侧

[分享] 科隆某外挂去自校验去验证

[复制链接]
weihao 发表于 2008-4-3 19:10
【文章标题】: 科隆某外挂去自校验去验证
【文章作者】: 松松
【作者邮箱】: dongmenbianxue@163.com
【软件名称】: XX科隆VIP版 2.0f
【软件大小】: 530
【下载地址】: 自己搜索下载
【加壳方式】: ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov
【保护方式】: ASPr+自校验
【编写语言】: VC
【使用工具】: OD
【软件介绍】: 某游戏外挂
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1、PEID查壳 :ASProtect 1.23 RC4 - 1.3.08.24 -> Alexey Solodovnikov 这里PEID分析的不对,估计是1.3X的壳,很快脱之
2、正式入题

运行,闪了一下就没了。估计里面有自校验,用OD打开,bp GetFileSize 没发现什么线索。到是OD说MSVRCT.dll加壳了。
再试其它办法bp CreateFileA
一次一次的中断,发现堆栈窗口如下
0012EC90  6BC864E8 /CALL 到 CreateFileA 来自 mfc42.6BC864E2
0012EC94  0012EE8C |FileName = "C:\WINNT\system32\MSVRCT.DLL"
0012EC98  40000000 |Access = GENERIC_WRITE
0012EC9C  00000000 |ShareMode = 0
0012ECA0  0012EDC0 |pSecurity = 0012EDC0
0012ECA4  00000002 |Mode = CREATE_ALWAYS
0012ECA8  00000080 |Attributes = NORMAL
0012ECAC  00000000 \hTemplateFile = NULL

ALT+F9返回到程序领空
004097B9 |. 56      PUSH ESI 返回到这里
004097BA |. 53      PUSH EBX
004097BB |. 8D4C24 18   LEA ECX,DWORD PTR SS:[ESP+18]
004097BF |. E8 BE520000  CALL <JMP.&mfc42.#6385_?Write@CFile@@UAE>
004097C4 |. 8D4C24 10   LEA ECX,DWORD PTR SS:[ESP+10]
004097C8 |. E8 AF520000  CALL <JMP.&mfc42.#2803_?Flush@CFile@@UAE>
004097CD |. 8D4C24 10   LEA ECX,DWORD PTR SS:[ESP+10]
004097D1 |. E8 A0520000  CALL <JMP.&mfc42.#1979_?Close@CFile@@UAE>
004097D6 |. 8D4C24 10   LEA ECX,DWORD PTR SS:[ESP+10]
004097DA |. C74424 28 FFF>MOV DWORD PTR SS:[ESP+28],-1
004097E2 |. E8 89520000  CALL <JMP.&mfc42.#665_??1CFile@@UAE@XZ>
004097E7 |> B8 01000000  MOV EAX,1
004097EC |> 8B4C24 20   MOV ECX,DWORD PTR SS:[ESP+20]
004097F0 |. 5F      POP EDI
004097F1 |. 5E      POP ESI
004097F2 |. 5D      POP EBP
004097F3 |. 5B      POP EBX

发现它自已写了一个MSVRCT.DLL 到system32目录下。 刚下完后我就在纳闷,一般来说,一个外挂都是带一个DLL的。
DLL负责进行进程插入到游戏进程里,完成一API HOOK一系列的动作,这个外挂怎么没有,原来是放在资源里,动态生成的。
呵呵,把DLL拷出,查壳结果,和主程序一样,顺手脱之。继续。
0040998F |> \8D5424 34   LEA EDX,DWORD PTR SS:[ESP+34]
00409993 |. 6A 15     PUSH 15                 ; /Arg2 = 00000015
00409995 |. 52      PUSH EDX                 ; |Arg1
00409996 |. 8BCB     MOV ECX,EBX               ; |
00409998 |. E8 937DFFFF  CALL _Tomato.00401730          ; \_Tomato.00401730
0040999D |. 8D4424 70   LEA EAX,DWORD PTR SS:[ESP+70]
004099A1 |. 50      PUSH EAX                 ; /FileName  
004099A2 |. FF15 E4924800 CALL DWORD PTR DS:[<&kernel32.LoadLibrar>; \LoadLibraryA 来到这里
004099A8 |. 8D4C24 4C   LEA ECX,DWORD PTR SS:[ESP+4C]
004099AC |. 6A 23     PUSH 23                 ; /Arg2 = 00000023
004099AE |. 51      PUSH ECX                 ; |Arg1
004099AF |. 8BCB     MOV ECX,EBX               ; |
004099B1 |. 8BF0     MOV ESI,EAX               ; |
004099B3 |. E8 787DFFFF  CALL _Tomato.00401730          ; \_Tomato.00401730
004099B8 |. 8D5424 4C   LEA EDX,DWORD PTR SS:[ESP+4C]
004099BC |. 52      PUSH EDX                 ; /ProcNameOrOrdinal
004099BD |. 56      PUSH ESI                 ; |hModule
004099BE |. FF15 C0924800 CALL DWORD PTR DS:[<&kernel32.GetProcAdd>; \GetProcAddress
004099C4 |. FFD0     CALL EAX

。。。LoadlibraryA后就出错了。还真麻烦,由于DLL加了壳,无法调试了。重新开始程序,断在004099A1 ,
到system32下把MSVRCT32.dll删除,把刚才脱完壳的DLL复制进去,OK,继续调试

堆栈窗口
0012EF04  0040123E /CALL 到 CreateFileA 来自 _Tomato.0040123C
0012EF08  0012EF40 |FileName = "\\.\SICE"
0012EF0C  C0000000 |Access = GENERIC_READ|GENERIC_WRITE
0012EF10  00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012EF14  00000000 |pSecurity = NULL
0012EF18  00000003 |Mode = OPEN_EXISTING
0012EF1C  00000080 |Attributes = NORMAL
0012EF20  00000000 \hTemplateFile = NULL
0012EF04  0040126F /CALL 到 CreateFileA 来自 _Tomato.0040126D
0012EF08  0012EF54 |FileName = "\\.\NTICE"
0012EF0C  C0000000 |Access = GENERIC_READ|GENERIC_WRITE
0012EF10  00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012EF14  00000000 |pSecurity = NULL
0012EF18  00000003 |Mode = OPEN_EXISTING
0012EF1C  00000080 |Attributes = NORMAL
0012EF20  00000000 \hTemplateFile = NULL

一大堆检测Softice,还有TRW,嘿嘿,我用的是OD,查不到我。没想到,程序自已关闭了。
看来是到地头了。重新开始,来到这里
00408209  . 8BCF     MOV ECX,EDI
0040820B  . E8 2091FFFF CALL _Tomato.00401330  
00408210  . 85C0     TEST EAX,EAX
00408212  . 74 10    JE SHORT _Tomato.00408224  <改JMP
00408214  . 6A 00    PUSH 0                  ; /ExitCode = 0
00408216  . FF15 989D480>CALL DWORD PTR DS:[<&user32.PostQuitMess>; \PostQuitMessage
0040821C  . 6A 00    PUSH 0                  ; /status = 0
0040821E  . FF15 409B480>CALL DWORD PTR DS:[<&msvcrt.exit>]    ; \exit
00408224  > 8B16     MOV EDX,DWORD PTR DS:[ESI]
00408226  . 8BCE     MOV ECX,ESI
00408228  . FF52 60   CALL DWORD PTR DS:[EDX+60]
0040822B  . 8BCF     MOV ECX,EDI
0040822D  . E8 CE90FFFF CALL _Tomato.00401300
00408232  . 85C0     TEST EAX,EAX
00408234  . 74 19    JE SHORT _Tomato.0040824F  <<<这里也是
00408236  . 6A 05    PUSH 5                  ; /Arg1 = 00000005
00408238  . 8BCD     MOV ECX,EBP               ; |
0040823A  . E8 C1210000 CALL _Tomato.0040A400          ; \_Tomato.0040A400
0040823F  . 6A 00    PUSH 0                  ; /ExitCode = 0
00408241  . FF15 989D480>CALL DWORD PTR DS:[<&user32.PostQuitMess>; \PostQuitMessage
00408247  . 6A 00    PUSH 0                  ; /status = 0
00408249  . FF15 409B480>CALL DWORD PTR DS:[<&msvcrt.exit>]    ; \exit
0040824F  > 8BCF     MOV ECX,EDI
00408251  . E8 CA90FFFF CALL _Tomato.00401320
00408256  . 85C0     TEST EAX,EAX
00408258  . 74 19    JE SHORT _Tomato.00408273     <<<这里
0040825A  . 6A 06    PUSH 6                  ; /Arg1 = 00000006
0040825C  . 8BCD     MOV ECX,EBP               ; |
0040825E  . E8 9D210000 CALL _Tomato.0040A400          ; \_Tomato.0040A400
00408263  . 6A 00    PUSH 0                  ; /ExitCode = 0
00408265  . FF15 989D480>CALL DWORD PTR DS:[<&user32.PostQuitMess>; \PostQuitMessage
0040826B  . 6A 00    PUSH 0                  ; /status = 0
0040826D  . FF15 409B480>CALL DWORD PTR DS:[<&msvcrt.exit>]    ; \exit
00408273  > E8 081B0000 CALL _Tomato.00409D80

全改完,保存,至此,程序乖乖的运行了。呵呵,用Sinffer软件看了一下,验证是用HTTP,还是
bp CreateFileA。填入ID,乱打的,然后点登陆。
堆栈窗口
0012CD48  0040C4CB /CALL 到 CreateFileA 来自 _Tomato2.0040C4C5
0012CD4C  0223945C |FileName = "C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\~ex48.tmp"
0012CD50  C0000000 |Access = GENERIC_READ|GENERIC_WRITE
0012CD54  00000000 |ShareMode = 0
0012CD58  00000000 |pSecurity = NULL
0012CD5C  00000002 |Mode = CREATE_ALWAYS
0012CD60  00000080 |Attributes = NORMAL
0012CD64  00000000 \hTemplateFile = NULL

写临时文件了,第一次写,第二次是读,不管,再断一次,
第2次中断后返回,CTRL+F9让它读完,读完后就是关键了。
0040C2E6 |. E8 D5050000 CALL _Tomato2.0040C8C0        这里开始验证了
0040C2EB |. 84C0     TEST AL,AL
0040C2ED |. 74 26    JE SHORT _Tomato2.0040C315
0040C2EF |. 68 0C4B4100 PUSH _Tomato2.00414B0C
0040C2F4 |. 68 DC4A4100 PUSH _Tomato2.00414ADC
0040C2F9 |. 8BCD     MOV ECX,EBP
0040C2FB |. C685 1D01000>MOV BYTE PTR SS:[EBP+11D],0
0040C302 |. E8 D9050000 CALL _Tomato2.0040C8E0
0040C307 |. 5F      POP EDI
0040C308 |. 5E      POP ESI
0040C309 |. 32C0     XOR AL,AL
0040C30B |. 5D      POP EBP
0040C30C |. 81C4 0401000>ADD ESP,104
0040C312 |. C2 1400   RETN 14
0040C315 |> 8BCD     MOV ECX,EBP
0040C317 |. E8 64050000 CALL _Tomato2.0040C880  <关键F7跟进
0040C31C |. 84C0     TEST AL,AL
0040C31E |. 74 28    JE SHORT _Tomato2.0040C348
0040C320 |. 8B55 08   MOV EDX,DWORD PTR SS:[EBP+8]
0040C323 |. C685 1D01000>MOV BYTE PTR SS:[EBP+11D],0
0040C32A |. 68 1C4B4100 PUSH _Tomato2.00414B1C
0040C32F |. 8BCD     MOV ECX,EBP
0040C331 |. 8B42 0C   MOV EAX,DWORD PTR DS:[EDX+C]
0040C334 |. 50      PUSH EAX
0040C335 |. E8 A6050000 CALL _Tomato2.0040C8E0
0040C33A |. 5F      POP EDI
0040C33B |. 5E      POP ESI
0040C33C |. 32C0     XOR AL,AL
0040C33E |. 5D      POP EBP
0040C33F |. 81C4 0401000>ADD ESP,104
0040C345 |. C2 1400   RETN 14

0040C87F   90      NOP
0040C880 /$ 8B41 08   MOV EAX,DWORD PTR DS:[ECX+8]
0040C883 |. 8B48 08   MOV ECX,DWORD PTR DS:[EAX+8]
0040C886 |. 51      PUSH ECX                 ; /s2 = "Failed"
0040C887 |. 68 704C4100 PUSH _Tomato2.00414C70          ; |s1 = "Failed"
0040C88C |. FF15 389B480>CALL DWORD PTR DS:[<&msvcrt._strcmpi>]  ; \_stricmp
0040C892 |. 83C4 08   ADD ESP,8
0040C895 |. 85C0     TEST EAX,EAX     <比较是不是验证失败 这里NOP掉
0040C897 |. 0F94C0    SETE AL        这里也是NOP
0040C89A \. C3      RETN

保存。。。。继续跟下去也没发现什么东西了。
由于没有这个游戏,也没办法验证到底还有没有暗桩。
收工。

--------------------------------------------------------------------------------
【经验总结】
这个程序把DLL隐藏在自身,运行时释放。由于壳的原因,会让OD无法继续跟踪,呵呵,只能取巧,在它
释放后没有调用前把脱壳后的DLL替换,虽然我注册的还是比较早的,但还是第一次写破文,也没什么技术含量,大家将就
着看看吧。另外问一下各位大大,能不能给我一个龙族联盟的邀请号,谢谢。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nxg6886368 发表于 2008-6-22 12:53
晕晕的看不懂  下米东西?`
apzp000 发表于 2008-6-23 19:07
a10517173 发表于 2008-6-24 12:53
老猫 发表于 2008-7-22 10:23
现在这个游戏好像关F了吧
石头学破解 发表于 2008-7-22 11:37
多转点精典的破解教程来到是挺好的。最好是新的。
li6574833 发表于 2010-5-1 23:16
学习了,谢谢
yahan 发表于 2010-5-2 13:26
还是蛮深奥的
verypig 发表于 2010-5-5 20:55
每帖必看,你说了半天,我知道了,就是他把dll加壳了,我记着有这回事了,我现在是爆破水平,建议以后把软件也带上,让我也照着练习练习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 07:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表