首页
社区
课程
招聘
杀某怪“狗”
发表于: 2005-6-4 19:41 4930

杀某怪“狗”

2005-6-4 19:41
4930
最近杀了一只怪“狗”。这个程序安装后,目录下共有三个文件:一个主程序文件,两个DLL文件。运行时主程序引导一个DLL文件(程序的主要功能都在这个DLL文件中),然后再读取另一个DLL文件的数据,接着读狗,然后判断有狗无狗。三个文件均未加壳,省去好多麻烦:)

这还不算。怪的是这个程序没有界面,是通过右键来运行的,所以和别的有些不同,无法直接运行主程序。

开始感到无从下手,后来仔细一分析立即晕倒!只要改几处跳转即完成爆破。由于涉及版权不便公开程序名。

一、先看看主程序xxxxxxxx.exe(隐去文件名)。

先侦察一下,不插入USB加密狗,随便加密一个文件,马上跳出一个警告框,提示“请插入有效的加密锁!”。

用OD载入主程序xxxxxxxx.exe后,可以搜索到字符串“请插入有效的加密锁!”。修改相应的跳转后,程序还是不能正常运行。后来发现主程序xxxxxxxx.exe实际上只是一个引导程序,所以不必改动它。

二、再来看看1.dll文件(隐去文件名)。

虽然它也有相应的字符串。修改相应的跳转后,程序还是跳出一个警告框,不能正常运行。看来它是主程序引导的对象,没有检测狗的功能。

三、最后看看2.dll文件(隐去文件名)。

用OD载入2.dll,搜索字符串会发现几个“Token9610”,其中有一处的上方有USB\VID_07E4&PID_9610”,明显是驱动之类的。双击后来到代码处:

10009A00  /$  83EC 24       SUB ESP,24
10009A03  |.  B9 98C80110   MOV ECX,1001C898
10009A08  |.  E8 43C6FFFF   CALL 10006050                            ;  10006050
10009A0D  |.  A1 C4CB0110   MOV EAX,DWORD PTR DS:[1001CBC4]
10009A12  |.  68 80000000   PUSH 80                                  ; /Arg8 = 00000080
10009A17  |.  6A 00         PUSH 0                                   ; |Arg7 = 00000000
10009A19  |.  6A 00         PUSH 0                                   ; |Arg6 = 00000000
10009A1B  |.  6A 00         PUSH 0                                   ; |Arg5 = 00000000
10009A1D  |.  6A 00         PUSH 0                                   ; |Arg4 = 00000000
10009A1F  |.  6A 00         PUSH 0                                   ; |Arg3 = 00000000
10009A21  |.  68 68520110   PUSH 10015268                            ; |Arg2 = 10015268
10009A26  |.  50            PUSH EAX                                 ; |Arg1 => 00000000
10009A27  |.  B9 A8BF0110   MOV ECX,1001BFA8                         ; |
10009A2C  |.  E8 4FA5FFFF   CALL 10003F80                            ; \2.10003F80
10009A31  |.  8B0D C4CB0110 MOV ECX,DWORD PTR DS:[1001CBC4]
10009A37  |.  68 80000000   PUSH 80     ; /Arg8 = 00000080
10009A3C  |.  6A 00         PUSH 0      ; |Arg7 = 00000000
10009A3E  |.  6A 00         PUSH 0      ; |Arg6 = 00000000
10009A40  |.  6A 00         PUSH 0      ; |Arg5 = 00000000
10009A42  |.  68 90A10110   PUSH 1001A190  ; | ASCII "USB\VID_07E4&PID_9610"/////驱动
10009A47  |.  6A 01         PUSH 1      ; |Arg3 = 00000001
10009A49  |.  68 78520110   PUSH 10015278 ; |Arg2 = 10015278
10009A4E  |.  51            PUSH ECX      ; |Arg1 => 00000000
10009A4F  |.  B9 20C40110   MOV ECX,1001C420 ; |
10009A54  |.  E8 27A5FFFF   CALL 10003F80
10009A59  |.  85C0          TEST EAX,EAX
10009A5B  |.  74 0C         JE SHORT 10009A69                        ;  10009A69
10009A5D  |.  B9 20C40110   MOV ECX,1001C420
10009A62  |.  E8 39B5FFFF   CALL 10004FA0                            ;  10004FA0
10009A67  |.  EB 04         JMP SHORT 10009A6D                       ;  10009A6D
10009A69  |>  8B4424 00     MOV EAX,DWORD PTR SS:[ESP]
10009A6D  |>  53            PUSH EBX
10009A6E  |.  55            PUSH EBP
10009A6F  |.  85C0          TEST EAX,EAX
10009A71  |.  56            PUSH ESI
10009A72  |.  0F84 E9000000 JE 10009B61 ////不能跳!跳则表示读取驱动不成功。NOP掉!
10009A78  |.  B9 A8BF0110   MOV ECX,1001BFA8
10009A7D  |.  33F6          XOR ESI,ESI
10009A7F  |.  E8 CCB0FFFF   CALL 10004B50
10009A84  |.  85C0          TEST EAX,EAX
10009A86  |.  76 29         JBE SHORT 10009AB1 ////这里也不能跳!跳则程序异常。NOP掉!
10009A88  |>  56            /PUSH ESI
10009A89  |.  B9 A8BF0110   |MOV ECX,1001BFA8
10009A8E  |.  E8 FDB1FFFF   |CALL 10004C90
10009A93  |.  85C0          |TEST EAX,EAX
10009A95  |.  74 0B         |JE SHORT 10009AA2
10009A97  |.  50            |PUSH EAX
10009A98  |.  B9 98C80110   |MOV ECX,1001C898
10009A9D  |.  E8 CEC5FFFF   |CALL 10006070
10009AA2  |>  B9 A8BF0110   |MOV ECX,1001BFA8
10009AA7  |.  46            |INC ESI
10009AA8  |.  E8 A3B0FFFF   |CALL 10004B50
10009AAD  |.  3BF0          |CMP ESI,EAX
10009AAF  |.^ 72 D7         \JB SHORT 10009A88
10009AB1  |>  B9 98C80110   MOV ECX,1001C898
10009AB6  |.  E8 55C7FFFF   CALL 10006210
10009ABB  |.  8BE8          MOV EBP,EAX
10009ABD  |.  33DB          XOR EBX,EBX
10009ABF  |.  85ED          TEST EBP,EBP
10009AC1  |.  0F86 9A000000 JBE 10009B61 ////不能跳!跳则表示没有驱动。NOP掉!
10009AC7  |.  57            PUSH EDI
10009AC8  |>  B9 08000000   /MOV ECX,8
10009ACD  |.  33C0          |XOR EAX,EAX
10009ACF  |.  8D7C24 14     |LEA EDI,DWORD PTR SS:[ESP+14]
10009AD3  |.  53            |PUSH EBX
10009AD4  |.  F3:AB         |REP STOS DWORD PTR ES:[EDI]
10009AD6  |.  B9 98C80110   |MOV ECX,1001C898
10009ADB  |.  E8 50C7FFFF   |CALL 10006230                           ;  10006230
10009AE0  |.  8D5424 14     |LEA EDX,DWORD PTR SS:[ESP+14]
10009AE4  |.  B9 98C80110   |MOV ECX,1001C898
10009AE9  |.  52            |PUSH EDX
10009AEA  |.  E8 A1C5FFFF   |CALL 10006090                           ;  10006090
10009AEF  |.  85C0          |TEST EAX,EAX
10009AF1  |.  74 58         |JE SHORT 10009B4B                       ;  10009B4B
10009AF3  |.  68 70020000   |PUSH 270
10009AF8  |.  E8 8E1C0000   |CALL 1000B78B                           ;  1000B78B
10009AFD  |.  8BD0          |MOV EDX,EAX
10009AFF  |.  B9 08000000   |MOV ECX,8
10009B04  |.  8D7424 18     |LEA ESI,DWORD PTR SS:[ESP+18]
10009B08  |.  33C0          |XOR EAX,EAX
10009B0A  |.  8D7A 40       |LEA EDI,DWORD PTR DS:[EDX+40]
10009B0D  |.  C742 60 01000>|MOV DWORD PTR DS:[EDX+60],1
10009B14  |.  F3:A5         |REP MOVS DWORD PTR ES:[EDI],DWORD PTR D>
10009B16  |.  BF 2CA10110   |MOV EDI,1001A12C  ;  ASCII"Token9610" ////双击后来到这里。
10009B1B  |.  83C9 FF       |OR ECX,FFFFFFFF
10009B1E  |.  83C4 04       |ADD ESP,4
10009B21  |.  F2:AE         |REPNE SCAS BYTE PTR ES:[EDI]
10009B23  |.  F7D1          |NOT ECX
10009B25  |.  2BF9          |SUB EDI,ECX
10009B27  |.  8BC1          |MOV EAX,ECX
10009B29  |.  8BF7          |MOV ESI,EDI
10009B2B  |.  8BFA          |MOV EDI,EDX
10009B2D  |.  C1E9 02       |SHR ECX,2
10009B30  |.  F3:A5         |REP MOVS DWORD PTR ES:[EDI],DWORD PTR D>
10009B32  |.  8BC8          |MOV ECX,EAX
10009B34  |.  83E1 03       |AND ECX,3
10009B37  |.  F3:A4         |REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:>
10009B39  |.  A1 6CCB0110   |MOV EAX,DWORD PTR DS:[1001CB6C]
10009B3E  |.  891485 70CB01>|MOV DWORD PTR DS:[EAX*4+1001CB70],EDX
10009B45  |.  40            |INC EAX
10009B46  |.  A3 6CCB0110   |MOV DWORD PTR DS:[1001CB6C],EAX
10009B4B  |>  43            |INC EBX
10009B4C  |.  3BDD          |CMP EBX,EBP
10009B4E  |.^ 0F82 74FFFFFF \JB 10009AC8                             ;  10009AC8
10009B54  |.  5F            POP EDI
10009B55  |.  5E            POP ESI
10009B56  |.  5D            POP EBP
10009B57  |.  B8 01000000   MOV EAX,1
10009B5C  |.  5B            POP EBX
10009B5D  |.  83C4 24       ADD ESP,24
10009B60  |.  C3            RETN

10009B16处的“Token9610”估计应该是狗标志了。看看前面有没有跳转会跳过这里。如果有就NOP掉强行让程序走到这里。

经查找发现10009A72和10009AC1处均JBE 10009B61,跳过狗标志处。NOP掉以上二处跳转后,测试时出现程序异常。跟踪后发现10009A86处也不能跳转,NOP掉这里的跳转后程序正常运行。

不过修改后要注销一下系统才能重新加载此DLL文件,否则内存中存留的还是原来的DLL数据。

至此狗被解。虽然是只怪狗,但也是只弱狗。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
2
学习的说
2005-6-4 20:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好难搞,朋友是否有兴趣?
它难倒了一大群朋友!也是USB狗,但是不会出现“请插入有效的加密锁”
2005-6-5 09:35
0
雪    币: 90
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
偶知道这个狗的
以前破过一个~
是南方×××公司的狗,比较简单~!
这种狗市场价格不到二十元一只!
2005-6-5 09:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,17元,域天的吧,一般是盗版市场二次加密用的多,壳简单
2005-6-13 12:16
0
游客
登录 | 注册 方可回帖
返回
//