首页
社区
课程
招聘
[旧帖] [求助]请高人解析疑惑,某外挂的自检测问题(纯技术问题) 0.00雪花
发表于: 2007-8-15 02:33 4436

[旧帖] [求助]请高人解析疑惑,某外挂的自检测问题(纯技术问题) 0.00雪花

2007-8-15 02:33
4436
[LEFT][/LEFT]    先说明一下概况,被解剖的程序是[完美泡泡v464]这个外挂,壳是nSPack 2.X

   鉴于这个壳比较容易干掉,所以不会麻烦到各位高人.脱壳之后直接运行外挂,登录试用账号挂机毫无问题.然而正准备用OD跟踪运行的时候问题来了.OD载入外挂后F9,外挂照常运行自动更新.但在更新检查完之后却自己调用ExitProcess了.  

   第一时间想到的是程序自校检,可是很快被自己否定了.自校验的话应该无论是否用OD载入都存在,直接运行外挂能正常试用说明了脱壳正确和没明显自校验特征. 因此怀疑是检测OD进程,但用插件将OD进程和窗口标题都隐藏了之后问题依旧.因为自己是破解新手,可以说0经验起步,对这个问题无从入手.  无意间拜读了一下laomms兄的[常见自校检分析实例],觉得还是有点机会,所以决定F8到底.

首先贴出来一下: 如下
=======================================================
0048E818 > $ 55             PUSH EBP                                       //脱壳后的程序开始处
0048E819   . 8BEC           MOV EBP,ESP
0048E81B   . 83C4 F0        ADD ESP,-10
0048E81E   . B8 88E44800    MOV EAX,unpacked.0048E488
0048E823   . E8 3C77F7FF    CALL unpacked.00405F64
0048E828   . A1 641D4900    MOV EAX,DWORD PTR DS:[491D64]
0048E82D   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0048E82F   . E8 A0A8FCFF    CALL unpacked.004590D4
0048E834   . A1 641D4900    MOV EAX,DWORD PTR DS:[491D64]
0048E839   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0048E83B   . BA 90E84800    MOV EDX,unpacked.0048E890
0048E840   . E8 87A4FCFF    CALL unpacked.00458CCC
0048E845   . 8B0D D8194900  MOV ECX,DWORD PTR DS:[4919D8]
0048E84B   . A1 641D4900    MOV EAX,DWORD PTR DS:[491D64]
0048E850   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0048E852   . 8B15 04D54800  MOV EDX,DWORD PTR DS:[48D504]
0048E858   . E8 8FA8FCFF    CALL unpacked.004590EC
0048E85D   . 8B0D 4C1F4900  MOV ECX,DWORD PTR DS:[491F4C]   
0048E863   . A1 641D4900    MOV EAX,DWORD PTR DS:[491D64]
0048E868   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0048E86A   . 8B15 30CD4800  MOV EDX,DWORD PTR DS:[48CD30]   
0048E870   . E8 77A8FCFF    CALL unpacked.004590EC
0048E875   . A1 641D4900    MOV EAX,DWORD PTR DS:[491D64]
0048E87A   . 8B00           MOV EAX,DWORD PTR DS:[EAX]
0048E87C   . E8 EBA8FCFF    CALL unpacked.0045916C             //#1 个人觉得比较关键的两个Call,这个是启动更新程序检测版本
0048E881   . E8 4E56F7FF    CALL unpacked.00403ED4             //#2 ExitProcess所在的call
0048E886   . 0000           ADD BYTE PTR DS:[EAX],AL
0048E888     FF             DB FF
0048E889     FF             DB FF
0048E88A     FF             DB FF

    一般来说程序拼命重复的那个地方就是开始,第1个标示(#1)是启动更新程序的call,F8这句之后外挂开始自动检测更新,因为解剖的是最新版所以不会更新文件,在检查过后就自己动关闭了更新程序但并不退出外挂.而第2个call单步过后程序Exit,决定[F7]跟进去.

F7后的程序:(长了点 别见怪)
=================================================
00403ED4  /$ 53             PUSH EBX
00403ED5  |. 56             PUSH ESI
00403ED6  |. 57             PUSH EDI
00403ED7  |. 55             PUSH EBP
00403ED8  |. BB 34264900    MOV EBX,unpacked.00492634
00403EDD  |. BE 00F04800    MOV ESI,unpacked.0048F000
00403EE2  |. BF 44204900    MOV EDI,unpacked.00492044
00403EE7  |. 807B 28 00     CMP BYTE PTR DS:[EBX+28],0
00403EEB  |. 75 16          JNZ SHORT unpacked.00403F03
00403EED  |. 833F 00        CMP DWORD PTR DS:[EDI],0
00403EF0  |. 74 11          JE SHORT unpacked.00403F03
00403EF2  |> 8B17           /MOV EDX,DWORD PTR DS:[EDI]
00403EF4  |. 89D0           |MOV EAX,EDX
00403EF6  |. 33D2           |XOR EDX,EDX
00403EF8  |. 8917           |MOV DWORD PTR DS:[EDI],EDX
00403EFA  |. 8BE8           |MOV EBP,EAX
00403EFC  |. FFD5           |CALL EBP
00403EFE  |. 833F 00        |CMP DWORD PTR DS:[EDI],0
00403F01  |.^75 EF          \JNZ SHORT unpacked.00403EF2
00403F03  |> 833D 04F04800 >CMP DWORD PTR DS:[48F004],0
00403F0A  |. 74 11          JE SHORT unpacked.00403F1D
00403F0C  |. E8 ABFEFFFF    CALL unpacked.00403DBC
00403F11  |. E8 32FFFFFF    CALL unpacked.00403E48
00403F16  |. 33C0           XOR EAX,EAX
00403F18  |. A3 04F04800    MOV DWORD PTR DS:[48F004],EAX
00403F1D  |> 807B 28 02     /CMP BYTE PTR DS:[EBX+28],2
00403F21  |. 75 0A          |JNZ SHORT unpacked.00403F2D
00403F23  |. 833E 00        |CMP DWORD PTR DS:[ESI],0
00403F26  |. 75 05          |JNZ SHORT unpacked.00403F2D
00403F28  |. 33C0           |XOR EAX,EAX
00403F2A  |. 8943 0C        |MOV DWORD PTR DS:[EBX+C],EAX
00403F2D  |> E8 1AFDFFFF    |CALL unpacked.00403C4C
00403F32  |. 807B 28 01     |CMP BYTE PTR DS:[EBX+28],1
00403F36  |. 76 05          |JBE SHORT unpacked.00403F3D
00403F38  |. 833E 00        |CMP DWORD PTR DS:[ESI],0
00403F3B  |. 74 21          |JE SHORT unpacked.00403F5E
00403F3D  |> 8B43 10        |MOV EAX,DWORD PTR DS:[EBX+10]
00403F40  |. 85C0           |TEST EAX,EAX
00403F42  |. 74 1A          |JE SHORT unpacked.00403F5E
00403F44  |. E8 2F180000    |CALL unpacked.00405778
00403F49  |. 8B53 10        |MOV EDX,DWORD PTR DS:[EBX+10]
00403F4C  |. 8B42 10        |MOV EAX,DWORD PTR DS:[EDX+10]
00403F4F  |. 3B42 04        |CMP EAX,DWORD PTR DS:[EDX+4]
00403F52  |. 74 0A          |JE SHORT unpacked.00403F5E
00403F54  |. 85C0           |TEST EAX,EAX
00403F56  |. 74 06          |JE SHORT unpacked.00403F5E
00403F58  |. 50             |PUSH EAX                                ; /hLibModule
00403F59  |. E8 06D3FFFF    |CALL <JMP.&kernel32.FreeLibrary>        ; \FreeLibrary
00403F5E  |> E8 C1FCFFFF    |CALL unpacked.00403C24
00403F63  |. 807B 28 01     |CMP BYTE PTR DS:[EBX+28],1
00403F67  |. 75 03          |JNZ SHORT unpacked.00403F6C
00403F69  |. FF53 24        |CALL DWORD PTR DS:[EBX+24]
00403F6C  |> 807B 28 00     |CMP BYTE PTR DS:[EBX+28],0
00403F70  |. 74 05          |JE SHORT unpacked.00403F77
00403F72  |. E8 A1FEFFFF    |CALL unpacked.00403E18
00403F77  |> 833B 00        |CMP DWORD PTR DS:[EBX],0
00403F7A  |. 75 17          |JNZ SHORT unpacked.00403F93               //这个地方跳过Exit,但一改JMP就出错,郁闷
00403F7C  |. 833D 24204900 >|CMP DWORD PTR DS:[492024],0
00403F83  |. 74 06          |JE SHORT unpacked.00403F8B
00403F85  |. FF15 24204900  |CALL DWORD PTR DS:[492024]
00403F8B  |> 8B06           |MOV EAX,DWORD PTR DS:[ESI]
00403F8D  |. 50             |PUSH EAX                                ; /ExitCode
00403F8E  |. E8 B1D2FFFF    |CALL <JMP.&kernel32.ExitProcess>        ; \ExitProcess
00403F93  |> 8B03           |MOV EAX,DWORD PTR DS:[EBX]
00403F95  |. 56             |PUSH ESI
00403F96  |. 8BF0           |MOV ESI,EAX
00403F98  |. 8BFB           |MOV EDI,EBX
00403F9A  |. B9 0B000000    |MOV ECX,0B
00403F9F  |. F3:A5          |REP MOVS DWORD PTR ES:[EDI],DWORD PTR D>  //来到这里会程序异常 无法继续 已经忽略所有错误
00403FA1  |. 5E             |POP ESI
00403FA2  \.^E9 76FFFFFF    \JMP unpacked.00403F1D
00403FA7   . 5D             POP EBP
00403FA8   . 5F             POP EDI

    很明显看到ExitProcess的地方,本来把它跳开就完事了,但改了好几个地方都没办法继续运行下去老是出错.  所以请各位仁兄给点提示,并且尽可能说得容易明白&详尽.毕竟我才学了3天,以前的汇编基础也一般般,弄起来蛮辛苦的. 先谢过各位了.

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 170
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=;]...[/QUOTE]
你有把 那个 je 改掉吗?
2007-8-15 04:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
当然试过..................不过把它顶头的JNZ都改JMP了  它改不改应该无关联吧.
2007-8-15 09:55
0
雪    币: 170
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=;]...[/QUOTE]
那你怎么不 将计就计
他 要让你 死在 00403F9F

试试看把 jnz 改成 JMP 40e888  整个跳去最外面的 call 让他继续下去看看

(当然要用 ollydbg 去改喔)
如果不能用 Ollydbg 改 就随便 拿个 HexEdit 先看ollydbg 改
了之后 他的 hex 怎么显示的 就用hexedi 去改掉
这样测测看吧

我用的方式都比较笨的 我也是一个新手 爆破大队的
2007-8-15 12:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
比较难, 超出了我的技术范围。

哈哈,我是菜菜鸟
2007-8-15 15:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵,我也是爆破大队的,不过我是个新炮手!多多学习!
2007-8-15 15:50
0
游客
登录 | 注册 方可回帖
返回