首页
社区
课程
招聘
传奇私服伴侣3.03主程序脱壳(工具为主)
发表于: 2006-3-13 23:40 8090

传奇私服伴侣3.03主程序脱壳(工具为主)

2006-3-13 23:40
8090
【文章标题】:  传奇私服伴侣3.03主程序脱壳(工具为主)
【文章作者】: xiaoboy
【作者邮箱】: xiao-boy@qq.com
【作者主页】: 木有
【软件名称】: 传奇私服伴侣3.03主程序
【下载地址】: http://www.myiis.cn/download/anticc_install.exe
【加壳方式】: Armadillo v4.X CopyMem-II
【保护方式】: Code Splicing+Import Table Elimination
【使用工具】: flyODBG、PEiD、ImportREC,LordPE_fix
【操作平台】: XPSP2
【软件介绍】: 传奇师傅防CC攻击
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! 小弟弟一次写脱文 有错误之处请多多指教!
--------------------------------------------------------------------------------
【详细过程】
  1. 找OEP
           peid显示:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks 根据个人经验 这个一般都是
    Armadillo v4.X CopyMem-II 的壳,但不确认 之后FI显示为 Armadillo v4.0,运行程序之后出现2个进程
    就确认是 Armadillo v4.X CopyMem-II 的壳了。
  
           既然是快速脱壳那当然不会太麻烦的。。。;)
    用flyODBG 载入ANTICC.exe 设置flyODBG忽略所有其它异常选项和 C000001D..C000001E 异常 。用IsDebug插件
    去掉flyODBG的调试器标志。 然后用Armadillo V4.0-V4.4.Standard.Protection.osc 直奔OEP..........快巴。
  
  
  2 二、利用ArmInline 7.1 修复程序
    现在程序已到了OEP了,代码如下:
  
  004B9AE8     55                     PUSH EBP                                ; This is the OEP!  Found By: fly
  004B9AE9     8BEC                   MOV EBP, ESP
  004B9AEB     83C4 F0                ADD ESP, -10
  004B9AEE     B8 90954B00            MOV EAX, ANTICC.004B9590
  004B9AF3     E8 C8CBF4FF            CALL ANTICC.004066C0   //我们着这跟进去。。。。。
  004B9AF8     A1 74CF4B00            MOV EAX, DWORD PTR DS:[4BCF74]
  004B9AFD     C600 01                MOV BYTE PTR DS:[EAX], 1
  004B9B00     A1 04D34B00            MOV EAX, DWORD PTR DS:[4BD304]
  004B9B05     8B00                   MOV EAX, DWORD PTR DS:[EAX]
  004B9B07     E8 68A1FAFF            CALL ANTICC.00463C74
  004B9B0C     A1 04D34B00            MOV EAX, DWORD PTR DS:[4BD304]
  004B9B11     8B00                   MOV EAX, DWORD PTR DS:[EAX]
  004B9B13     BA 689B4B00            MOV EDX, ANTICC.004B9B68
  004B9B18     E8 3F9DFAFF            CALL ANTICC.0046385C
  004B9B1D     8B0D E8D14B00          MOV ECX, DWORD PTR DS:[4BD1E8]          ; ANTICC.004C01F0
  004B9B23     A1 04D34B00            MOV EAX, DWORD PTR DS:[4BD304]
  004B9B28     8B00                   MOV EAX, DWORD PTR DS:[EAX]
  004B9B2A     8B15 44194B00          MOV EDX, DWORD PTR DS:[4B1944]          ; ANTICC.004B1990
  004B9B30     E8 57A1FAFF            CALL ANTICC.00463C8C
  004B9B35     8B0D 14CF4B00          MOV ECX, DWORD PTR DS:[4BCF14]          ; ANTICC.004C01E8
  004B9B3B     A1 04D34B00            MOV EAX, DWORD PTR DS:[4BD304]
  004B9B40     8B00                   MOV EAX, DWORD PTR DS:[EAX]
  004B9B42     8B15 F8164B00          MOV EDX, DWORD PTR DS:[4B16F8]          ; ANTICC.004B1744
  004B9B48     E8 3FA1FAFF            CALL ANTICC.00463C8C
  
  跟进后就到了下面代码:
  
  004066C0     53                     PUSH EBX
  004066C1     8BD8                   MOV EBX, EAX
  004066C3     33C0                   XOR EAX, EAX
  004066C5     A3 9CA04B00            MOV DWORD PTR DS:[4BA09C], EAX
  004066CA     6A 00                  PUSH 0
  004066CC     E8 2BFFFFFF            CALL ANTICC.004065FC                    ; JMP to kernel32.GetModuleHandleA  //再跟进。。。。
  004066D1     A3 68E64B00            MOV DWORD PTR DS:[4BE668], EAX
  004066D6     A1 68E64B00            MOV EAX, DWORD PTR DS:[4BE668]
  004066DB     A3 A8A04B00            MOV DWORD PTR DS:[4BA0A8], EAX
  004066E0     33C0                   XOR EAX, EAX
  004066E2     A3 ACA04B00            MOV DWORD PTR DS:[4BA0AC], EAX
  004066E7     33C0                   XOR EAX, EAX
  004066E9     A3 B0A04B00            MOV DWORD PTR DS:[4BA0B0], EAX
  
  
  在跟进就到到:
  
  004065FC   - FF25 545F3900          JMP NEAR DWORD PTR DS:[395F54]          ; kernel32.GetModuleHandleA  // 光标停在这里。。
  00406602     8BC0                   MOV EAX, EAX
  00406604   - FF25 FC633900          JMP NEAR DWORD PTR DS:[3963FC]          ; kernel32.LocalAlloc
  0040660A     8BC0                   MOV EAX, EAX
  0040660C   - FF25 E0643900          JMP NEAR DWORD PTR DS:[3964E0]          ; kernel32.TlsGetValue
  00406612     8BC0                   MOV EAX, EAX
  00406614   - FF25 785F3900          JMP NEAR DWORD PTR DS:[395F78]          ; kernel32.TlsSetValue
  0040661A     8BC0                   MOV EAX, EAX
  0040661C     50                     PUSH EAX
  0040661D     6A 40                  PUSH 40
  0040661F     E8 E0FFFFFF            CALL ANTICC.00406604                    ; JMP to kernel32.LocalAlloc
  00406624     C3                     RETN
  00406625     8D40 00                LEA EAX, DWORD PTR DS:[EAX]
  00406628   - E9 E5C8EA01            JMP 022B2F12             // 返回到壳里。。。。根据FLY以前的文章判断这就是Code Splicing了
  0040662D     C3                     RETN                        
  0040662E     8BC0                   MOV EAX, EAX
  00406630     53                     PUSH EBX
  00406631     E8 F2FFFFFF            CALL ANTICC.00406628
  00406636     8BD8                   MOV EBX, EAX
  00406638     85DB                   TEST EBX, EBX
  0040663A     74 36                  JE SHORT ANTICC.00406672
  0040663C     833D 9CA04B00 FF       CMP DWORD PTR DS:[4BA09C], -1
  00406643     75 0A                  JNZ SHORT ANTICC.0040664F
  00406645   - E9 E6C8EA01            JMP 022B2F30            // 返回到壳里。。。。根据FLY以前的文章判断这就是Code Splicing了
  
  当光标停在004065FC 处时 注意看信息窗口提示 :
  
  DS:[00395F54]=7C80B529 (kernel32.GetModuleHandleA)  //不同的机子或许不一样的
  
  00395F54 就是IAT表的地址。其实上面做的就是查找IAT表的地址。
  
  现在我们在数据窗口跟随地址,就出现了乱续后的 IAT表 如下:
  
  00395F54  7C80B529  kernel32.GetModuleHandleA
  00395F58  77D6AA06  USER32.SetMenuItemInfoA
  00395F5C  77D1FACD  USER32.EnumThreadWindows
  00395F60  77D3EC98  USER32.LoadStringA
  00395F64  770F71A2  OLEAUT32.SetErrorInfo
  00395F68  77F07C0C  GDI32.SetEnhMetaFileBits
  00395F6C  7C80B529  kernel32.GetModuleHandleA
  00395F70  7C80D47E  kernel32.GetLocaleInfoA
  00395F74  770F4850  OLEAUT32.SysFreeString
  00395F78  7C809BF5  kernel32.TlsSetValue
  00395F7C  77D18C06  USER32.SetTimer
  00395F80  77D1C64D  USER32.InflateRect
  00395F84  7C882FD3  kernel32.LoadLibraryExA
  
  向上翻倒结束
  
  00395D90  00140121
  00395D94  001807D7  //开始 记住这个地址待会有用,然后算出表的大小=  8F4  .这些待会都有用的。
  00395D98  77D1F807  USER32.DrawEdge
  00395D9C  77D1BCBD  USER32.DispatchMessageA
  00395DA0  77D1E666  USER32.DestroyWindow
  00395DA4  77D5050B  USER32.MessageBoxA
  00395DA8  77D3FA46  USER32.GetKeyboardType
  00395DAC  77EFA990  GDI32.SetROP2
  00395DB0  77D1E3A1  USER32.DestroyMenu
  00395DB4  77D1E8CE  USER32.DestroyIcon
  
  
  向下翻倒结束
  
  00396670  77D1CEFD  USER32.PeekMessageA
  00396674  77D25380  USER32.SetActiveWindow
  00396678  77D32420  USER32.DrawFrameControl
  0039667C  77D35C98  USER32.IsDialogMessageA
  00396680  7C81E4BD  kernel32.CreateEventA
  00396684  7C80977B  kernel32.InterlockedIncrement
  00396688  ABABABAB  /// 结束
  0039668C  ABABABAB
  
  
  Import Table Elimination 所在处我们已经找到 接下来就是Code Splicing 了
  
  我们在看回上面的代码:
  004065FC   - FF25 545F3900          JMP NEAR DWORD PTR DS:[395F54]          ; kernel32.GetModuleHandleA  // 光标停在这里。。
  00406602     8BC0                   MOV EAX, EAX
  00406604   - FF25 FC633900          JMP NEAR DWORD PTR DS:[3963FC]          ; kernel32.LocalAlloc
  0040660A     8BC0                   MOV EAX, EAX
  0040660C   - FF25 E0643900          JMP NEAR DWORD PTR DS:[3964E0]          ; kernel32.TlsGetValue
  00406612     8BC0                   MOV EAX, EAX
  00406614   - FF25 785F3900          JMP NEAR DWORD PTR DS:[395F78]          ; kernel32.TlsSetValue
  0040661A     8BC0                   MOV EAX, EAX
  0040661C     50                     PUSH EAX
  0040661D     6A 40                  PUSH 40
  0040661F     E8 E0FFFFFF            CALL ANTICC.00406604                    ; JMP to kernel32.LocalAlloc
  00406624     C3                     RETN
  00406625     8D40 00                LEA EAX, DWORD PTR DS:[EAX]
  00406628   - E9 E5C8EA01            JMP 022B2F12             // 返回到壳里。。。。根据FLY以前的文章判断这就是Code Splicing了
  0040662D     C3                     RETN                        //不同的机器位置也不一样的。。
  0040662E     8BC0                   MOV EAX, EAX
  00406630     53                     PUSH EBX
  00406631     E8 F2FFFFFF            CALL ANTICC.00406628
  00406636     8BD8                   MOV EBX, EAX
  00406638     85DB                   TEST EBX, EBX
  0040663A     74 36                  JE SHORT ANTICC.00406672
  0040663C     833D 9CA04B00 FF       CMP DWORD PTR DS:[4BA09C], -1
  00406643     75 0A                  JNZ SHORT ANTICC.0040664F
  00406645   - E9 E6C8EA01            JMP 022B2F30            // 返回到壳里。。。。根据FLY以前的文章判断这就是Code Splicing了 ,跟进
  
  到达显示如下:
  
  020A2F30     F7D6                   NOT ESI
  020A2F32     0FCB                   BSWAP EBX
  020A2F34     75 02                  JNZ SHORT 020A2F38
  020A2F36     75 41                  JNZ SHORT 020A2F79
  020A2F38     50                     PUSH EAX
  020A2F39     66:87FA                XCHG DX, DI
  020A2F3C     66:87FA                XCHG DX, DI
  020A2F3F     66:87D2                XCHG DX, DX
  020A2F42     78 00                  JS SHORT 020A2F44
  020A2F44     66:87FA                XCHG DX, DI
  020A2F47     66:87FA                XCHG DX, DI
  020A2F4A     58                     POP EAX
  020A2F4B     0FCB                   BSWAP EBX
  
  
  经过上翻下翻得出:
  020A0000     66:87FA                XCHG DX, DI  //Code Splicing开始 记住待会有用
  020A0003     66:87F6                XCHG SI, SI
  020A0006     66:87FA                XCHG DX, DI
  020A0009     BB 0A000000            MOV EBX, 0A
  020A000E     54                     PUSH ESP
  020A000F   - E9 951336FE            JMP ANTICC.004013A9
  
  020AFFA5     91                     XCHG EAX, ECX
  020AFFA6     0FC9                   BSWAP ECX
  020AFFA8     66:87CB                XCHG BX, CX
  020AFFAB     8BFF                   MOV EDI, EDI
  020AFFAD     66:87CB                XCHG BX, CX
  020AFFB0     0FC9                   BSWAP ECX
  020AFFB2     91                     XCHG EAX, ECX
  020AFFB3     75 00                  JNZ SHORT 020AFFB5
  020AFFB5     50                     PUSH EAX
  020AFFB6     56                     PUSH ESI
  020AFFB7     8B43 04                MOV EAX, DWORD PTR DS:[EBX+4]
  020AFFBA     50                     PUSH EAX
  020AFFBB   - E9 AB2F37FE            JMP ANTICC.00422F6B  //Code Splicing结束 大小为 ffc0
  020AFFC0     0000                   ADD BYTE PTR DS:[EAX], AL
  
  
  现在位置都确定 我们就打开 ArmInline 7.1
  
  [sleiv] process ID = 看文件-->附加-->ID
  Start  Of Target Code = 00401000  
  Length Of Target Code = 000B9000
  
  在ArmInline的Code Splicing选项添入:
  ===================================
  Start  Of Spliced Code = 020A0000
  Length Of spliced Code = 0000ffc0
  
  点“remove splicing”。
  Patch succesful修复成功。
  -----------------------------------
  -----------------------------------
  
  在Import Elimination选项添入:
  Base Of Existing IAT=00395D94
  Length Of Existing IAT=8F4
  New Base RVA Of IAT=4C1000 //即内存窗口的.idata 段的开始位置
  
  点“rebase IAT”。
  IAT Elimination修复成功。
  ===================================
  
  完成修复之后就打开LordPE_fix 修正大小后 dump 完整转存。
  再用ImportREC 1.6 修复IAT表,就可以完工了 。。。
  
  PEID 深度扫描显示 Borland Delphi 6.0 - 7.0 OK
  
  还有些效验 要去除才可以正常运行。。   
  
--------------------------------------------------------------------------------
【经验总结】
  这个教会大家如可使用现有的工具快速达到脱壳的目的,但是基础才是最重要。。。
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年03月13日 22:30:51

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Thank you sharing.......
2006-3-14 10:22
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
Thank you sharing.......
2006-3-14 10:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
去除自效验的地方

004B2AC7    B8 A0344B00        mov eax,dumped_.004B34A0                                            ; ASCII "VK"
004B2ACC    E8 2FB8F5FF        call dumped_.0040E300
004B2AD1    837D EC 00         cmp dword ptr ss:[ebp-14],0
004B2AD5    75 0C              jnz short dumped_.004B2AE3       //这里改成JMP
004B2AD7    6A 01              push 1
004B2AD9    E8 3A3EF5FF        call <jmp.&kernel32.ExitProcess>
004B2ADE    E9 E2070000        jmp dumped_.004B32C5
004B2AE3    33C0               xor eax,eax
2006-3-14 14:59
0
雪    币: 242
活跃值: (163)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
ok!
2006-3-14 15:25
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
很详细  谢谢分享
2006-3-14 15:49
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你这个是标准壳  双进程不一定就是 Armadillo CopyMem-II

Armadillo  CopyMem-II  用这个方法脱肯定 异常退出

谢谢文章 俺也练习用!
2006-3-26 21:51
0
雪    币: 280
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
【软件介绍】: 可以把rm和rmvb文件转换为AVI、VCD、SVCD、DVD、MPE........

传奇私服伴侣不是外挂?
2006-3-26 22:57
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
9
很好,回去练练
2006-3-27 10:16
0
雪    币: 208
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 swordkok 发布
传奇私服伴侣不是外挂?


是个传奇私服的补助工具,据说可以防CC.
不清楚了.
2006-3-28 11:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不错的教程,谢谢分享
2006-4-7 14:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢分享!!!!!!
2006-4-7 17:20
0
雪    币: 51
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
xiaoboy的帖必须顶!
2006-4-7 17:32
0
游客
登录 | 注册 方可回帖
返回
//