飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 28346|回复: 23

[原创] THEMIDA带壳调试之《天涯QQ对对碰助手3.0》内存LOAD

[复制链接]
  • TA的每日心情
    开心
    2017-10-10 17:24
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2007-3-24 17:48:43 | 显示全部楼层 |阅读模式
    THEMIDA带壳调试之《天涯QQ对对碰助手3.0》内存LOAD

    PEID 查壳是 themida 1.0.0.5 -> Oreans Technologies,初步估计是themida 1.5版

    载入后隐藏OD,在代码段下内存写入断点,SHIFT+F9运行

    0061F70C      F3:A4             REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>       ;F7一次后F8一次
    0061F70E      C685 992F1B07 5>MOV BYTE PTR SS:[EBP+71B2F99],56
    0061F715      68 396D1FD4       PUSH D41F6D39
    0061F71A      FFB5 99211B07     PUSH DWORD PTR SS:[EBP+71B2199]
    0061F720      8D85 25882507     LEA EAX,DWORD PTR SS:[EBP+7258825]
    0061F726      FFD0              CALL EAX
    0061F728      68 00800000       PUSH 8000
    0061F72D      6A 00             PUSH 0
    0061F72F      52                PUSH EDX
    0061F730      FFD0              CALL EAX

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    SHIFT+F9继续运行,我们又看到熟悉代码了:(注意看中断位置的MFC42,原来是用MFC编译过的C程序)


    006255F2      8908              MOV DWORD PTR DS:[EAX],ECX                 ; MFC42.#540      <<===这里
    006255F4      AD                LODS DWORD PTR DS:[ESI]
    006255F5      C746 FC 0000000>MOV DWORD PTR DS:[ESI-4],0
    006255FC      89B5 09171B07     MOV DWORD PTR SS:[EBP+71B1709],ESI
    00625602      83F8 FF           CMP EAX,-1
    00625605      0F85 20000000     JNZ tyddp.0062562B
    0062560B      813E DDDDDDDD     CMP DWORD PTR DS:[ESI],DDDDDDDD
    00625611      0F85 14000000     JNZ tyddp.0062562B

    ===============================================================================

    到模块004010000处搜索ASCII码,找到关键信息,MFC程序我们可以用MFC消息入口查找器找关键点,另外

    运行一个主程序,会弹出NAG注册框框,用查找器选择“继续试用,暂不注册按纽”,程序很快会把入口地址找

    到004014F0这个地址,复制下来。回到OD中,删除刚才设置的内存断点,CTRL+G来到004014F0处下F2断点。

    SHIFT+F9 运行,程序运行起来后点一下继续试用,暂不注册按纽”按纽,程序立即断在了004014F0处,在堆栈

    中向下查找来自程序领空的调用,MFC的调用比较烦琐,会出现很多调用,耐心一点。我们返回到 00405361

    00405327    /74 46            JE SHORT tyddp.0040536F              <<=====注册提示NAG跳转========   
    00405329    |68 C0050000      PUSH 5C0
    0040532E    |E8 D73F0000      CALL tyddp.0040930A
    00405333    |83C4 04          ADD ESP,4
    00405336    |894424 18        MOV DWORD PTR SS:[ESP+18],EAX
    0040533A    |85C0             TEST EAX,EAX
    0040533C    |C64424 40 08     MOV BYTE PTR SS:[ESP+40],8
    00405341    |74 0C            JE SHORT tyddp.0040534F
    00405343    |56               PUSH ESI
    00405344    |8BC8             MOV ECX,EAX
    00405346    |E8 B5BCFFFF      CALL tyddp.00401000
    0040534B    |8BE8             MOV EBP,EAX
    0040534D    |EB 02            JMP SHORT tyddp.00405351
    0040534F    |33ED             XOR EBP,EBP
    00405351    |8B55 00          MOV EDX,DWORD PTR SS:[EBP]
    00405354    |8BCD             MOV ECX,EBP
    00405356    |C64424 40 06     MOV BYTE PTR SS:[ESP+40],6
    0040535B    |FF92 C0000000    CALL DWORD PTR DS:[EDX+C0]     ;这个call就是MFC的对话框调用
    00405361    |85ED             TEST EBP,EBP                <<=========================我们返回到这里
    00405363    |74 0A            JE SHORT tyddp.0040536F
    00405365    |8B45 00          MOV EAX,DWORD PTR SS:[EBP]
    00405368    |6A 01            PUSH 1
    0040536A    |8BCD             MOV ECX,EBP
    0040536C    |FF50 04          CALL DWORD PTR DS:[EAX+4]
    0040536F    \68 3CE94000      PUSH tyddp.0040E93C     

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


    向上翻几段代码还发现了60次使用限制的跳转,看来这几段就是程序的关键处了。

    00405156      E8 43410000       CALL tyddp.0040929E
    0040515B      84DB              TEST BL,BL
    0040515D      74 14             JE SHORT tyddp.00405173                          <<====60次限制跳转=====
    0040515F      A1 D4F24000       MOV EAX,DWORD PTR DS:[40F2D4]
    00405164      6A 40             PUSH 40
    00405166      50                PUSH EAX
    00405167      68 B8E94000       PUSH tyddp.0040E9B8                        ; 未注册版只能试用60次!
    0040516C      8BCE              MOV ECX,ESI
    0040516E      E8 29430000       CALL tyddp.0040949C
    00405173      3BFD              CMP EDI,EBP
    00405175      74 08             JE SHORT tyddp.0040517F
    00405177      8B17              MOV EDX,DWORD PTR DS:[EDI]
    00405179      6A 01             PUSH 1
    0040517B      8BCF              MOV ECX,EDI
    0040517D      FF12              CALL DWORD PTR DS:[EDX]
    0040517F      8B46 20           MOV EAX,DWORD PTR DS:[ESI+20]
    00405182      55                PUSH EBP

    。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    好,那我们就在0040515D下硬件执行断点,CTRL+F2重新载入,SHIFT+F9 运行,程序被断下来了

    0040515D     /74 14             JE SHORT tyddp.00405173               <<=======断在这里,我们让他跳过去0040515F     |A1 D4F24000       MOV EAX,DWORD PTR DS:[40F2D4]
    00405164     |6A 40             PUSH 40
    00405166     |50                PUSH EAX
    00405167     |68 B8E94000       PUSH tyddp.0040E9B8                        ; 未注册版只能试用60次!
    0040516C     |8BCE              MOV ECX,ESI
    0040516E     |E8 29430000       CALL tyddp.0040949C
    00405173     \3BFD              CMP EDI,EBP
    00405175      74 08             JE SHORT tyddp.0040517F
    00405177      8B17              MOV EDX,DWORD PTR DS:[EDI]
    00405179      6A 01             PUSH 1
    0040517B      8BCF              MOV ECX,EDI
    0040517D      FF12              CALL DWORD PTR DS:[EDX]

    F8单步走几下来到 00405324处:

    00405324      F6C4 41           TEST AH,41
    00405327      74 46             JE SHORT tyddp.0040536F             <<========注册NAG跳转,我们跳过去
    00405329      68 C0050000       PUSH 5C0
    0040532E      E8 D73F0000       CALL tyddp.0040930A
    00405333      83C4 04           ADD ESP,4
    00405336      894424 18         MOV DWORD PTR SS:[ESP+18],EAX
    0040533A      85C0              TEST EAX,EAX
    0040533C      C64424 40 08      MOV BYTE PTR SS:[ESP+40],8
    00405341      74 0C             JE SHORT tyddp.0040534F
    00405343      56                PUSH ESI
    00405344      8BC8              MOV ECX,EAX
    00405346      E8 B5BCFFFF       CALL tyddp.00401000
    0040534B      8BE8              MOV EBP,EAX
    0040534D      EB 02             JMP SHORT tyddp.00405351
    0040534F      33ED              XOR EBP,EBP
    00405351      8B55 00           MOV EDX,DWORD PTR SS:[EBP]
    00405354      8BCD              MOV ECX,EBP
    00405356      C64424 40 06      MOV BYTE PTR SS:[ESP+40],6
    0040535B      FF92 C0000000     CALL DWORD PTR DS:[EDX+C0]
    00405361      85ED              TEST EBP,EBP
    00405363      74 0A             JE SHORT tyddp.0040536F
    00405365      8B45 00           MOV EAX,DWORD PTR SS:[EBP]
    00405368      6A 01             PUSH 1
    0040536A      8BCD              MOV ECX,EBP
    0040536C      FF50 04           CALL DWORD PTR DS:[EAX+4]


    F8单步继续走来到 0040540F处:

    0040540C      83F8 05           CMP EAX,5
    0040540F      75 51             JNZ SHORT tyddp.00405462       <<=====这里就是关键跳转,我们NOP掉
    00405411      6A 01             PUSH 1                                    
    00405413      68 E9030000       PUSH 3E9
    00405418      8BCE              MOV ECX,ESI
    0040541A      E8 793E0000       CALL tyddp.00409298
    0040541F      8BC8              MOV ECX,EAX
    00405421      E8 CC3E0000       CALL tyddp.004092F2
    00405426      6A 00             PUSH 0
    00405428      6A 00             PUSH 0
    0040542A      68 00000010       PUSH 10000000
    0040542F      68 FC030000       PUSH 3FC
    00405434      8BCE              MOV ECX,ESI
    00405436      E8 5D3E0000       CALL tyddp.00409298
    0040543B      8BC8              MOV ECX,EAX
    0040543D      E8 883F0000       CALL tyddp.004093CA
    00405442      6A 00             PUSH 0
    00405444      68 FC030000       PUSH 3FC
    00405449      8BCE              MOV ECX,ESI
    0040544B      E8 483E0000       CALL tyddp.00409298
    00405450      8BC8              MOV ECX,EAX
    00405452      E8 9B3E0000       CALL tyddp.004092F2
    00405457      6A 00             PUSH 0
    00405459      68 00000010       PUSH 10000000
    0040545E      6A 00             PUSH 0
    00405460      EB 09             JMP SHORT tyddp.0040546B
    00405462      6A 00             PUSH 0
    00405464      6A 00             PUSH 0

    ===============================================================================

    F9运行后程序已经显示已注册了,看来我们已解除了程序未注册前的NAG注册框和60次使用限制,让

    我们来做个内存LOAD吧,打开FLY大侠修改的Keymake 2.0 免杀版, 选择制作内存补丁,选择好目标

    程序,添加3处修改代码:

    1:修改地址:0040515D        修改长度:2        原始指令:7414        修改指令:EB14

    2:修改地址:00405327        修改长度:2         原始指令:7446        修改指令:EB46

    3:修改地址:0040540F        修改长度:2         原始指令:7551        修改指令:9090

    保存一下,试运行,好的程序已运行起来了,显示“已注册”,收工。


    PS:后话:此文的目的是让更多的人了解Themida和利用手中的工具进行简单破解分析它。

    [ 本帖最后由 a__p 于 2007-3-24 17:59 编辑 ]
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-3-24 18:04:07 | 显示全部楼层
    牛啊 学习了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-3-24 18:27:58 | 显示全部楼层
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-3-24 18:47:33 | 显示全部楼层
    建议加精......很不错...
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-4-30 22:30:45 | 显示全部楼层
    支持并学习!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-1 21:52:51 | 显示全部楼层
    原帖由 rayicy 于 2007-3-24 18:27 发表
    http://www.skycn.com/soft/26982.html 挂下的地址


    下来是个UPX的壳~!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-8 18:30:11 | 显示全部楼层
    厉害了,带壳调试
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-10-19 14:02
  • 签到天数: 240 天

    [LV.8]以坛为家I

    发表于 2007-12-30 14:18:27 | 显示全部楼层
    汗,按3楼给的地址下载的真是UPX壳/:badly
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 05:48
  • 签到天数: 440 天

    [LV.9]以坛为家II

    发表于 2008-3-31 20:22:06 | 显示全部楼层
    大哥超强啊!!佩服.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-4-2 09:23:21 | 显示全部楼层
    好强大.看不懂/:011
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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