飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 12013|回复: 14

[转贴] 科隆某外挂去自校验去验证

[复制链接]

该用户从未签到

发表于 2006-3-21 12:36:07 | 显示全部楼层 |阅读模式
此文章我首发于看雪。。。。
再发到这里来,顺便申请入PYG

【文章标题】: 科隆某外挂去自校验去验证
【文章作者】: 松松
【作者邮箱】: [email protected]
【软件名称】: 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替换,虽然我注册的还是比较早的,但还是第一次写破文,也没什么技术含量,大家将就
  着看看吧。另外问一下各位大大,能不能给我一个龙族联盟的邀请号,谢谢。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年03月21日 11:13:11

[ 本帖最后由 tigerisme 于 2006-8-26 21:29 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2006-3-28 23:12:08 | 显示全部楼层
好东西就要大家看,大家学
PYG19周年生日快乐!

该用户从未签到

发表于 2008-1-22 08:39:20 | 显示全部楼层
支持楼主,支持原创
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-2-3 06:45
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2008-2-13 17:44:34 | 显示全部楼层
    支持楼主,支持原创
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-13 22:02:11 | 显示全部楼层
    支持楼主,支持原创
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-14 01:52:33 | 显示全部楼层
    谢谢楼主,好破文学习了~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-14 11:34:07 | 显示全部楼层
    我也好好学习,我要学习网络验证
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-2-19 10:07:45 | 显示全部楼层

    求教

    求教~
    哪位大哥发个破解诛仙外挂的帖子啊~
    看半天看不懂~顺便把要用的软件写下~一篇文章写下来~我们菜鸟都不知道怎么弄出来的那些函数~什么东东~肯定郁闷~你们高手写的确实不错~但是对菜鸟来说是天书~你们看到回帖应该知道~大部分回答都是~看不懂~!!!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-20 15:19:25 | 显示全部楼层
    不错。。学习下。。感谢提供
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-3-25 11:50:28 | 显示全部楼层

    回复 1# 的帖子

    又学习了,谢谢楼主
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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