首页
社区
课程
招聘
[原创]TTP106Demo最小保护UnPaCk
2009-2-16 01:15 8402

[原创]TTP106Demo最小保护UnPaCk

2009-2-16 01:15
8402
【文章标题】: TTP106Demo最小保护UnPaCk
【文章作者】: eASYTt
【作者主页】: http://blog.sina.com.cn/77muyulong
【软件名称】: NOTEPAD.EXE
【下载地址】: 系统自带
【保护方式】: TTP106Demo最小保护
【编写语言】: Microsoft Visual C++ 7.0 Method2 [调试]
【使用工具】: OD LoadPE ImportREC
【作者声明】: 仅兴趣 无他...
--------------------------------------------------------------------------------
【详细过程】
于近日偶得TTP106Demo版 兴起 加NOTEPAD以脱之 因初涉此壳 故以最小保护为基 循序渐进...望有朝一日能一探TTP之内在...

TTP正式版与试用版之保护不可同日而语 撰写此文 仅作为抛砖引玉 ...

首先加壳我们需要的NOTEPAD 因为初次 力求最小难度 所以加之最小保护

曾听作者大侠一言曰

somuch

发表于 2008-10-19 00:34
试炼品 的选项 是 不做任何加密处理的选项。
所以用LordPE就可以了。


我的程序与作者口中试练品极为相似 故一探其究竟...

因为是最小保护 所以anti调试并没有 普通OD加载即可运行

运行后Alt+M打开内存映像

  Memory map, 条目 38
   地址=01000000
   大小=00001000 (4096.)
   属主=NOTEPAD_ 01000000 (自身)
   区段=
   包含=PE 文件头
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  Memory map, 条目 39
   地址=01001000
   大小=000EA000 (958464.)
   属主=NOTEPAD_ 01000000
   区段=.TTP
   包含=代码,资源
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  Memory map, 条目 40
   地址=010EB000
   大小=00001000 (4096.)
   属主=NOTEPAD_ 01000000
   区段=.TTP
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  Memory map, 条目 41
   地址=010EC000
   大小=00001000 (4096.)
   属主=NOTEPAD_ 01000000
   区段=.TTP
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  Memory map, 条目 42
   地址=010ED000
   大小=00001000 (4096.)
   属主=NOTEPAD_ 01000000
   区段=.TTP
   包含=输入表
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  Memory map, 条目 43
   地址=010EE000
   大小=00013000 (77824.)
   属主=NOTEPAD_ 01000000
   区段=.TTP
   包含=SFX
   类型=Imag 01001040
   访问=RWE
   初始访问=RWE
  


Alt+C返回代码窗 后 Ctrl+G 输入 01001000

我们来到01001000处
  01001000   .  C86FDA77      dd      ADVAPI32.RegQueryValueExW
  01001004   .  F06BDA77      dd      ADVAPI32.RegCloseKey
  01001008   .  7D8FDC77      dd      ADVAPI32.RegCreateKeyW
  0100100C   .  FDD5DC77      dd      ADVAPI32.IsTextUnicode
  01001010   .  8378DA77      dd      ADVAPI32.RegQueryValueExA
  01001014   .  1B76DA77      dd      ADVAPI32.RegOpenKeyExA
  01001018   .  CCD7DA77      dd      ADVAPI32.RegSetValueExW
  

因为我们的最小保护没有选择API加密 所以IAT乖乖的躺在代码里 记录器初始与结尾 就可计算其RVA与SIZE

我们向后翻

最后一个函数出现在01001340 结尾与01001344

于是我们得到
  IAT
  RVA==01001000-01000000==1000
  SIZE==01001344-01001000==344
  

记录下待用

有了IAT对于一个最小保护的程序来讲就是DUMP映像文件了 再之后修复OEP就成

简单看了下他的代码
  0100337E  /$  8BFF          mov     edi, edi
  01003380  |.  56            push    esi
  01003381  |.  57            push    edi
  01003382  |.  8B3D 80A40001 mov     edi, dword ptr [100A480]
  01003388  |.  33F6          xor     esi, esi
  0100338A  |.  56            push    esi                              ; /Arg1 => 00000000
  0100338B  |.  E8 7FF3FFFF   call    0100270F                         ; \NOTEPAD_.0100270F
  01003390  |.  85C0          test    eax, eax
  01003392  |.  74 40         je      short 010033D4
  01003394  |.  56            push    esi                              ; /hTemplateFile
  01003395  |.  68 80000000   push    80                               ; |Attributes = NORMAL
  0100339A  |.  6A 03         push    3                                ; |Mode = OPEN_EXISTING
  0100339C  |.  56            push    esi                              ; |pSecurity
  0100339D  |.  6A 03         push    3                                ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  0100339F  |.  68 00000080   push    80000000                         ; |Access = GENERIC_READ
  010033A4  |.  BE 28960001   mov     esi, 01009628                    ; |
  010033A9  |.  56            push    esi                              ; |FileName => ""
  010033AA  |.  FF15 04110001 call    dword ptr [1001104]              ; \CreateFileW
  010033B0  |.  83F8 FF       cmp     eax, -1
  010033B3  |.  A3 80A40001   mov     dword ptr [100A480], eax
  010033B8  |.  75 08         jnz     short 010033C2
  010033BA  |.  56            push    esi                              ; /Arg1 => 01009628
  010033BB  |.  E8 601A0000   call    01004E20                         ; \NOTEPAD_.01004E20
  010033C0  |.  EB 0C         jmp     short 010033CE
  010033C2  |>  6A FF         push    -1
  010033C4  |.  56            push    esi
  010033C5  |.  E8 AF1D0000   call    01005179
  010033CA  |.  85C0          test    eax, eax
  010033CC  |.  75 06         jnz     short 010033D4
  010033CE  |>  893D 80A40001 mov     dword ptr [100A480], edi
  010033D4  |>  5F            pop     edi
  010033D5  |.  5E            pop     esi
  010033D6  \.  C3            retn
  


基本已经很清楚的"还原"在内存里了 应该没有什么太大的问题 (是基本么?还是全部?)

直接用loadPE修正镜像大小 之后完整转存出来备用

再接下来就是修复了

我们需要修复两项内容
1OEP
2IAT

在修复前还缺少一个数据 OEP 找找看
  010011E0   .  25FCD177         dd      USER32.CreateWindowExW
  010011E4   .  D5EED177         dd      USER32.GetDesktopWindow
  

在记事本运行的时候都会创建窗口 我们找找这个指令 call [010011e0]

Ctrl+S 找到的第一个
  01004667  |.  53               push    ebx                              ; /lParam
  01004668  |.  56               push    esi                              ; |hInst
  01004669  |.  53               push    ebx                              ; |hMenu
  0100466A  |.  53               push    ebx                              ; |hParent
  0100466B  |.  FF35 709A0001    push    dword ptr [1009A70]              ; |Height = 210 (528.)
  01004671  |.  BE 94130001      mov     esi, 01001394                    ; |
  01004676  |.  FF35 749A0001    push    dword ptr [1009A74]              ; |Width = 302 (770.)
  0100467C  |.  FF35 7C9A0001    push    dword ptr [1009A7C]              ; |Y = 98 (152.)
  01004682  |.  FF35 789A0001    push    dword ptr [1009A78]              ; |X = 43 (67.)
  01004688  |.  68 0000CF00      push    0CF0000                          ; |Style = WS_OVERLAPPED|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION
  0100468D  |.  56               push    esi                              ; |WindowName => ""
  0100468E  |.  68 20900001      push    01009020                         ; |Class = "Notepad"
  01004693  |.  53               push    ebx                              ; |ExtStyle
  01004694  |.  FF15 E0110001    call    dword ptr [10011E0]              ; \CreateWindowExW
  

很好 这就是我们要找的那个call 看类名Notepad正是主窗体的类名 之后的工作就是向前追溯了...
  01004565  /$  8BFF             mov     edi, edi
  01004567  |.  55               push    ebp
  01004568  |.  8BEC             mov     ebp, esp
  0100456A  |.  81EC A8000000    sub     esp, 0A8
  

函数首

本地调用来自 0100297B

转到 0100297B
  01002936  /$  8BFF             mov     edi, edi
  01002938  |.  55               push    ebp
  01002939  |.  8BEC             mov     ebp, esp
  0100293B  |.  83EC 20          sub     esp, 20
  

函数首

本地调用来自 0100750C

转到0100750C

转过去了再向上找一点 很熟悉了
  0100739D   .  6A 70            push    70
  0100739F   .  68 98180001      push    01001898
  010073A4   .  E8 BF010000      call    01007568
  010073A9   .  33DB             xor     ebx, ebx
  010073AB   .  53               push    ebx                         ; /pModule => NULL
  010073AC   .  8B3D CC100001    mov     edi, dword ptr [10010CC]    ; |KERNEL32.GetModuleHandleA
  010073B2   .  FFD7             call    edi                         ; \GetModuleHandleA
  010073B4   .  66:8138 4D5A     cmp     word ptr [eax], 5A4D
  010073B9   .  75 1F            jnz     short 010073DA
  010073BB   .  8B48 3C          mov     ecx, dword ptr [eax+3C]
  010073BE   .  03C8             add     ecx, eax
  010073C0   .  8139 50450000    cmp     dword ptr [ecx], 4550
  010073C6   .  75 12            jnz     short 010073DA
  010073C8   .  0FB741 18        movzx   eax, word ptr [ecx+18]
  010073CC   .  3D 0B010000      cmp     eax, 10B
  010073D1   .  74 1F            je      short 010073F2
  010073D3   .  3D 0B020000      cmp     eax, 20B
  010073D8   .  74 05            je      short 010073DF
  010073DA   >  895D E4          mov     dword ptr [ebp-1C], ebx
  010073DD   .  EB 27            jmp     short 01007406
  010073DF   >  83B9 84000000 0E cmp     dword ptr [ecx+84], 0E
  010073E6   .^ 76 F2            jbe     short 010073DA
  010073E8   .  33C0             xor     eax, eax
  010073EA   .  3999 F8000000    cmp     dword ptr [ecx+F8], ebx
  010073F0   .  EB 0E            jmp     short 01007400
  010073F2   >  8379 74 0E       cmp     dword ptr [ecx+74], 0E
  010073F6   .^ 76 E2            jbe     short 010073DA
  010073F8   .  33C0             xor     eax, eax
  010073FA   .  3999 E8000000    cmp     dword ptr [ecx+E8], ebx
  01007400   >  0F95C0           setne   al
  01007403   .  8945 E4          mov     dword ptr [ebp-1C], eax
  01007406   >  895D FC          mov     dword ptr [ebp-4], ebx
  01007409   .  6A 02            push    2
  0100740B   .  FF15 38130001    call    dword ptr [1001338]         ;  MSVCRT.__set_app_type
  01007411   .  59               pop     ecx
  01007412   .  830D 9CAB0001 FF or      dword ptr [100AB9C], FFFFFF>
  01007419   .  830D A0AB0001 FF or      dword ptr [100ABA0], FFFFFF>
  01007420   .  FF15 34130001    call    dword ptr [1001334]         ;  MSVCRT.__p__fmode
  01007426   .  8B0D B89A0001    mov     ecx, dword ptr [1009AB8]
  0100742C   .  8908             mov     dword ptr [eax], ecx
  0100742E   .  FF15 30130001    call    dword ptr [1001330]         ;  MSVCRT.__p__commode
  01007434   .  8B0D B49A0001    mov     ecx, dword ptr [1009AB4]
  0100743A   .  8908             mov     dword ptr [eax], ecx
  0100743C   .  A1 2C130001      mov     eax, dword ptr [100132C]
  01007441   .  8B00             mov     eax, dword ptr [eax]
  01007443   .  A3 A4AB0001      mov     dword ptr [100ABA4], eax
  01007448   .  E8 A7010000      call    010075F4
  0100744D   .  391D 08960001    cmp     dword ptr [1009608], ebx
  01007453   .  75 0C            jnz     short 01007461
  01007455   .  68 F4750001      push    010075F4                    ;  入口地址
  0100745A   .  FF15 28130001    call    dword ptr [1001328]         ;  MSVCRT.__setusermatherr
  01007460   .  59               pop     ecx
  01007461   >  E8 77010000      call    010075DD
  01007466   .  68 10900001      push    01009010
  0100746B   .  68 0C900001      push    0100900C
  01007470   .  E8 5D010000      call    010075D2                    ;  jmp 到 MSVCRT._initterm
  01007475   .  A1 B09A0001      mov     eax, dword ptr [1009AB0]
  0100747A   .  8945 DC          mov     dword ptr [ebp-24], eax
  0100747D   .  8D45 DC          lea     eax, dword ptr [ebp-24]
  01007480   .  50               push    eax
  01007481   .  FF35 AC9A0001    push    dword ptr [1009AAC]
  01007487   .  8D45 D4          lea     eax, dword ptr [ebp-2C]
  0100748A   .  50               push    eax
  0100748B   .  8D45 D0          lea     eax, dword ptr [ebp-30]
  0100748E   .  50               push    eax
  0100748F   .  8D45 CC          lea     eax, dword ptr [ebp-34]
  01007492   .  50               push    eax
  01007493   .  FF15 20130001    call    dword ptr [1001320]         ;  MSVCRT.__getmainargs
  01007499   .  8945 C8          mov     dword ptr [ebp-38], eax
  0100749C   .  68 08900001      push    01009008
  010074A1   .  68 00900001      push    01009000
  010074A6   .  E8 27010000      call    010075D2                    ;  jmp 到 MSVCRT._initterm
  010074AB   .  83C4 24          add     esp, 24
  010074AE   .  A1 1C130001      mov     eax, dword ptr [100131C]
  010074B3   .  8B30             mov     esi, dword ptr [eax]
  010074B5   .  8975 E0          mov     dword ptr [ebp-20], esi
  010074B8   .  803E 22          cmp     byte ptr [esi], 22
  010074BB   .  75 3A            jnz     short 010074F7
  010074BD   >  46               inc     esi
  010074BE   .  8975 E0          mov     dword ptr [ebp-20], esi
  010074C1   .  8A06             mov     al, byte ptr [esi]
  010074C3   .  3AC3             cmp     al, bl
  010074C5   .  74 04            je      short 010074CB
  010074C7   .  3C 22            cmp     al, 22
  010074C9   .^ 75 F2            jnz     short 010074BD
  010074CB   >  803E 22          cmp     byte ptr [esi], 22
  010074CE   .  75 04            jnz     short 010074D4
  010074D0   >  46               inc     esi
  010074D1   .  8975 E0          mov     dword ptr [ebp-20], esi
  010074D4   >  8A06             mov     al, byte ptr [esi]
  010074D6   .  3AC3             cmp     al, bl
  010074D8   .  74 04            je      short 010074DE
  010074DA   .  3C 20            cmp     al, 20
  010074DC   .^ 76 F2            jbe     short 010074D0
  010074DE   >  895D AC          mov     dword ptr [ebp-54], ebx
  010074E1   .  8D45 80          lea     eax, dword ptr [ebp-80]
  010074E4   .  50               push    eax                         ; /pStartupinfo
  010074E5   .  FF15 D0100001    call    dword ptr [10010D0]         ; \GetStartupInfoA
  010074EB   .  F645 AC 01       test    byte ptr [ebp-54], 1
  010074EF   .  74 11            je      short 01007502
  010074F1   .  0FB745 B0        movzx   eax, word ptr [ebp-50]
  010074F5   .  EB 0E            jmp     short 01007505
  010074F7   >  803E 20          cmp     byte ptr [esi], 20
  010074FA   .^ 76 D8            jbe     short 010074D4
  010074FC   .  46               inc     esi
  010074FD   .  8975 E0          mov     dword ptr [ebp-20], esi
  01007500   .^ EB F5            jmp     short 010074F7
  01007502   >  6A 0A            push    0A
  01007504   .  58               pop     eax
  01007505   >  50               push    eax
  01007506   .  56               push    esi
  01007507   .  53               push    ebx
  01007508   .  53               push    ebx
  01007509   .  FFD7             call    edi
  0100750B   .  50               push    eax                         ; |Arg1
  0100750C   .  E8 25B4FFFF      call    01002936                    ; \NOTEPAD_.01002936
  

之后打开ImportREC选择进程
  OEP==0100739D-01000000==739D
 
  还有上面记录的IAT的信息
 
  IAT
  RVA==01001000-01000000==1000
  SIZE==01001344-01001000==344
  

填好后获取输入表 得到一个大的模块 里面有很多模块和函数

显示无效 CUT

得到完整而干净的IAT

共9个模块

保存IAT 修复转存文件

运行------>>成功...

呵呵 也算是勉强完成了一个TTP的UNPACK 高手莫笑 这只是起步 下一次也许会对IAT加密进行探索...

希望高手们可以多多指点 我知道自己这个像是脱了个压缩壳一样 莫嘲笑哈~

最后感谢你看到这里 未能忍受菜虫的笔记而表示感谢...

--------------------------------------------------------------------------------
【经验总结】
菜虫学习笔记 TTP研究之初始...

--------------------------------------------------------------------------------
【版权声明】: 本文首发于PEDIY(hIMcrACk) 一蓑烟雨(i++) 无版权 欢迎转载 欢迎大侠指点~
2009年02月16日 1:02:28

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (8)
雪    币: 303
活跃值: (461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 2009-2-16 08:57
2
0
好,谢谢,学习
雪    币: 2288
活跃值: (1187)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zenix 1 2009-2-16 11:15
3
0
奇怪, 你的 TTP 106 是被 NO-NAG 過的?
不是原版的 DEMO ?
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
himcrack 6 2009-2-16 21:46
4
0
我正要看他们的区别...
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
newjueqi 7 2009-2-16 23:50
5
0
有空踏着高手踩出来的路玩一下TT
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
himcrack 6 2009-2-17 01:08
6
0
兄过谦矣~

刚测试了原版TTP似乎多少是有差异

引用于unpack

原來您也玩過啊?

我也是這樣子的.

後來經過各種測試,發現了不會死的方法.
好像是把某些插件移除就可以了.
具體是哪些, 忘了


愿探知究竟...
雪    币: 2288
活跃值: (1187)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zenix 1 2009-2-17 11:59
7
0
你試試, 把看雪上面的 OLLY-ICE 拿出來, 把所有的插件全拿到.
一定可以跑 TTP

然後, 再一個一個插件加回去.
就會發現有些插件會死.
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
himcrack 6 2009-2-18 22:13
8
0
与大侠共探索~~
雪    币: 65
活跃值: (811)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
美丽破船 5 2009-2-23 00:32
9
0
现在TT也被过了??
真郁闷了,我以后用什么保护我的程序啊·~~
哎~~~
努力跟LZ学习,以后用自己的壳保护……
游客
登录 | 注册 方可回帖
返回