发新话题
打印

[转载]老妖的 C32Asm V0.4.12 脱壳+修复+破解

[转载]老妖的 C32Asm V0.4.12 脱壳+修复+破解

文章作者:fly

标 题:老妖的 C32Asm V0.4.12 脱壳+修复+破解
发信人:fly
时 间:2004-1-21 周三, 下午7:49
详细信息:


下载地址:  http://www.c32asm.com/download/c32asm.rar
升级日期:  2004年1月17日
软件大小:  2 M
软件语言:  中文
应用平台:  Win9x/NT/2000/XP
  
【软件简介】:1.hex编辑功能增加使用文件映射选项,功能用于快速打开大的文件,但是缺点是独占模式也就是打开文件后其他程序不能对这个文件操作,如果你家内存够大而且想在hex编辑的时候还可以执行这个文件那么就关掉这个。  2.修正汇编查询器的bug。  3.hex编辑功能增加自动适应基址选项,功能用于从hex状态切换到汇编状态的时候自动根据pe文件的基址填充汇编状态时候的基址(此功能会在第一次切换的时候消耗更多的时间(我的p42.4多消耗了0.01秒),自己看着办是否选上)。  4.修正dump功能的一些错误,更好的dump兼容性,如果发现不能dump的文件请在c32asm论坛报告出来,我会及时处理的。 5.hex部分保存备份时候能创建b00-b99个备份文件和提示创建备份文件功能(可以在hex的通用菜单关闭此功能)。  6.开放了多语言的功能。  7.更改了一下版本命名的方法,加入了编译日期。  8.祝大家新年愉快。
      
【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
      
【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC
   
—————————————————————————————————  
【脱壳过程】:
        
      
      
一、寻找OEP
      
      
老规矩:用IsDebug 1.4插件去掉Ollydbg的调试器标志。忽略除了“内存访问异常”之外的所有其他异常选项。
      
        
00401000    68 01406300      push C32Asm.00634001//进入OD后停在这!
00401005    E8 01000000      call C32Asm.0040100B
0040100A    C3            retn
      
F9运行,程序会中断在异常处,Shift+F9通过异常
      
00FA9CB5    3100           xor dword ptr ds:[eax],eax//最后1次异常
00FA9CB7    64:8F05 00000000   pop dword ptr fs:[0]
00FA9CBE    58            pop eax
00FA9CBF    833D C4E7FA00 00   cmp dword ptr ds:[FAE7C4],0
00FA9CC6    74 14          je short 00FA9CDC
00FA9CC8    6A 0C          push 0C
00FA9CCA    B9 C4E7FA00      mov ecx,0FAE7C4
00FA9CCF    8D45 F8         lea eax,dword ptr ss:[ebp-8]
00FA9CD2    BA 04000000      mov edx,4
00FA9CD7    E8 6075FFFF      call 00FA123C
00FA9CDC    FF75 FC         push dword ptr ss:[ebp-4]
00FA9CDF    FF75 F8         push dword ptr ss:[ebp-8]
00FA9CE2    8B45 F4         mov eax,dword ptr ss:[ebp-C]
00FA9CE5    8338 00         cmp dword ptr ds:[eax],0
00FA9CE8    74 02          je short 00FA9CEC
00FA9CEA    FF30           push dword ptr ds:[eax]
00FA9CEC    FF75 F0         push dword ptr ss:[ebp-10]
00FA9CEF    FF75 EC         push dword ptr ss:[ebp-14]
00FA9CF2    C3            retn//此处下断,Shift+F9,断在这!返回 00FCF6B4

00FCF6B4    81F7 DF3F8F20     xor edi,208F3FDF
00FCF6BA    E8 11000000      call 00FCF6D0
      
用F7单步跟踪,Why?因为偶想从中寻找Stolen Code  
      
00FCF7A2    E9 2F000000      jmp 00FCF7D6//此处下断,F9,断在这,跳出循环!
00FCF7BF    E9 3EFFFFFF      jmp 00FCF702//循环

00FCF881    61            popad
00FCF882    EB 01          jmp short 00FCF885

00FCF8E6    896C24 04        mov dword ptr ss:[esp+4],ebp ★
00FCF902    8BEC           mov ebp,esp ★
00FCF911    6A FF          push -1 ★
00FCF997    68 CE354000      push 4035CE  

00FCFA21    890424          mov dword ptr ss:[esp],eax ★

00FCFAAD    68 A0304A00      push 4A30A0  
00FCFAB2    68 DC974700      push 4797DC  
00FCFAB7    896C24 04        mov dword ptr ss:[esp+4],ebp ★

00FCFBF6    8903           mov dword ptr ds:[ebx],eax ★
00FCFBF8    58            pop eax             ; C32Asm.005044C8
00FCFBF9    5B            pop ebx
00FCFBFA    9D            popfd
00FCFBFB    EB 01          jmp short 00FCFBFE

00FCFBFE    FF35 69F9FC00     push dword ptr ds:[FCF969] ; C32Asm.005044C8
00FCFC20    FF7424 04        push dword ptr ss:[esp+4]  ; C32Asm.005044C8 ★

00FCFD33    B8 084D4400      mov eax,444D08

00FCFEE7    8903           mov dword ptr ds:[ebx],eax ; C32Asm.004CF5AA
00FCFEEF    FF35 5AFCFC00     push dword ptr ds:[FCFC5A] ; C32Asm.004CF5AA ★

00FCFF02    64:A1 00000000    mov eax,dword ptr fs:[0] ★

00FCFF20    894424 04        mov dword ptr ss:[esp+4],eax ★
00FCFF24    F3:            prefix rep:

00FCFF3C    64:8925 00000000   mov dword ptr fs:[0],esp ★

00FCFF50    83EC 68         sub esp,68 ★

00FCFF6B    895C24 04        mov dword ptr ss:[esp+4],ebx ★
00FCFF6F    F3:            prefix rep:
00FCFF70    EB 02          jmp short 00FCFF74

00FCFF92    897424 04        mov dword ptr ss:[esp+4],esi ★
00FCFF96    F3:            prefix rep:
00FCFF97    EB 02          jmp short 00FCFF9B

00FCFFB9    897C24 04        mov dword ptr ss:[esp+4],edi ★
00FCFFBD    F3:            prefix rep:
00FCFFBE    EB 02          jmp short 00FCFFC2

00FCFFD5    8965 E8         mov dword ptr ss:[ebp-18],esp ★
00FCFFE5    33DB           xor ebx,ebx ★
00FCFFF4    895D FC         mov dword ptr ss:[ebp-4],ebx ★
00FD0004    6A 02          push 2 ★
00FD0013    FF15 48664E00     call dword ptr ds:[4E6648]; msvcrt.__set_app_type ★
00FD0026    59            pop ecx ★
00FD0034    830D 681C5500 FF   or dword ptr ds:[551C68],FFFFFFFF ★
00FD0048    830D 6C1C5500 FF   or dword ptr ds:[551C6C],FFFFFFFF ★

00FD005C    FF15 4C664E00     call dword ptr ds:[4E664C]; msvcrt.__p__fmode ★

00FD00C8    8908           mov dword ptr ds:[eax],ecx ★
00FD00D7    FF15 50664E00     call dword ptr ds:[4E6650] ; msvcrt.__p__commode ★

00FD011E    FF3421          push dword ptr ds:[ecx]
00FD0135    59            pop ecx ; C32Asm.00551C48 ★
00FD0143    8908           mov dword ptr ds:[eax],ecx ★
00FD0152    A1 54664E00      mov eax,dword ptr ds:[4E6654] ★
00FD0164    8B00           mov eax,dword ptr ds:[eax] ★
00FD0173    A3 641C5500      mov dword ptr ds:[551C64],eax ★

00FD0185    68 D1F54C00      push 4CF5D1 ★
00FD018E    C3            retn

00FD019F    391D 30B65300     cmp dword ptr ds:[53B630],ebx ★

00FD01A9    9C            pushfd//结束  
00FD01AA    EB 01          jmp short 00FD01AD


00FD0382    8947 00         mov dword ptr ds:[edi],eax ; C32Asm.004CF48A//返回程序的地址
00FD0385    58            pop eax
00FD0386    5F            pop edi
00FD0387    9D            popfd
00FD0388    EB 01          jmp short 00FD038B

00FD038B    FF35 B401FD00     push dword ptr ds:[FD01B4] ; C32Asm.004CF48A
00FD0391    68 E0F7FC00      push 0FCF7E0
00FD0396    C3            retn

00FCF7E3    51            push ecx
00FCF7E4    57            push edi
00FCF7E5    9C            pushfd
00FCF7E6    FC            cld
00FCF7E7    BF 24F8FC00      mov edi,0FCF824
00FCF7EC    B9 5E280000      mov ecx,285E
00FCF7F1    F3:AA          rep stos byte ptr es:[edi]//清扫战场  
00FCF7F3    9D            popfd
00FCF7F4    5F            pop edi
00FCF7F5    59            pop ecx
00FCF7F6    C3            retn  //飞向光明之巅! 返回至 004CE74A
      
注意以上偶打★的代码,这些代码应该与 Stolen Code 有关!
      
      
—————————————————————————————————
二、补上OEP处的Stolen Code
      
      
参考以上打★的代码和曾经修复的C32Asm V0.1114的代码,偶修复的Stolen Code如下:
      
      
004CF415    55            push ebp//在这儿用LordPE纠正ImageSize后完全DUMP这个进程
004CF416    8BEC           mov ebp,esp
004CF418    6A FF          push -1
004CF41A    68 C8445000      push C32Asm.005044C8
004CF41F    68 AAF54C00      push C32Asm.004CF5AA
004CF424    64:A1 00000000    mov eax,dword ptr fs:[0]
004CF42A    50            push eax
004CF42B    64:8925 00000000   mov dword ptr fs:[0],esp
004CF432    83EC 68         sub esp,68
004CF435    53            push ebx
004CF436    56            push esi
004CF437    57            push edi
004CF438    8965 E8         mov dword ptr ss:[ebp-18],esp
004CF43B    33DB           xor ebx,ebx
004CF43D    895D FC         mov dword ptr ss:[ebp-4],ebx
004CF440    6A 02          push 2
004CF442    FF15 48664E00     call dword ptr ds:[4E6648]       ; msvcrt.__set_app_type
004CF448    59            pop ecx
004CF449    830D 681C5500 FF   or dword ptr ds:[551C68],FFFFFFFF
004CF450    830D 6C1C5500 FF   or dword ptr ds:[551C6C],FFFFFFFF
004CF457    FF15 4C664E00     call dword ptr ds:[4E664C]       ; msvcrt.__p__fmode
004CF45D    8B0D 4C1C5500     mov ecx,dword ptr ds:[551C4C]
004CF463    8908           mov dword ptr ds:[eax],ecx
004CF465    FF15 50664E00     call dword ptr ds:[4E6650]       ; msvcrt.__p__commode
004CF46B    8B0D 481C5500     mov ecx,dword ptr ds:[551C48]
004CF471    8908           mov dword ptr ds:[eax],ecx
004CF473    A1 54664E00      mov eax,dword ptr ds:[4E6654]
004CF478    8B00           mov eax,dword ptr ds:[eax]
004CF47A    A3 641C5500      mov dword ptr ds:[551C64],eax
004CF47F    E8 4D010000      call C32Asm.004CF5D1
004CF484    391D 30B65300     cmp dword ptr ds:[53B630],ebx//上面这些字节是补上的Stolen Code  
      
      
004CF48A    75 0C          jnz short C32Asm.004CF498//从壳中返回到这里
004CF48C    68 CEF54C00      push C32Asm.004CF5CE
004CF491    FF15 58664E00     call dword ptr ds:[4E6658] ; msvcrt.__setusermatherr
004CF497    59            pop ecx
004CF498    E8 1F010000      call C32Asm.004CF5BC
004CF49D    68 0C415200      push C32Asm.0052410C
004CF4A2    68 08415200      push C32Asm.00524108
004CF4A7    E8 0A010000      call C32Asm.004CF5B6     ; jmp to msvcrt._initterm
      
      
—————————————————————————————————
三、修复输入表
   
   
运行ImportREC,选择这个进程。把OEP改为000CF415,RAV=000E5000,Size=00001904, 点IT AutoSearch,点“Get Import”,用“追踪层次1”和“ASProtect 1.3 calculated imports”插件修复全部的无效函数,FixDump。
      
      
—————————————————————————————————
四、消除暗桩
      
      
1、004480D6 处
      
      
004480D4    51            push ecx
004480D5    50            push eax//pll love phenix!  
004480D6    FF15 58835300     call dword ptr ds:[538358]//异常 ①
004480DC    E8 0D6A0800      call C32Asm.004CEAEE ; jmp to mfc42.#1205_AfxOleInit
      
跟进这个004480D6 call dword ptr ds:[538358]发现程序复制“pll love phenix”等字符,然后返回
      
00FA56AD    5E            pop esi
00FA56AE    5B            pop ebx
00FA56AF    5D            pop ebp
00FA56B0    C2 0800         retn 8//返回 004480DC

Ctrl+F 在程序空间里查找命令:retn 8  随便找一个吧:

0040167F    C2 0800         retn 8

修改:把[538358]处的 FA5660 改为:0040167F

00538358  60 56 FA 00 //旧的指针  
00538358  7F 16 40 00 //新的指针  
   
      
————————————————————————
2、00448797 处
      
      
00448797    FF15 50835300     call dword ptr ds:[538350]//这里对004487A8、0045F798处解码  
0044879D    EB 08          jmp short C32Asm.004487A7
      
①、004487A8 处解码:
      
004487A7    E9 01000000      jmp C32Asm.004487AD
004487AC    EF            out dx,eax
004487AD    8B4B 78         mov ecx,dword ptr ds:[ebx+78]
004487B0    51            push ecx
004487B1    8BCF           mov ecx,edi
004487B3    E8 96600800      call C32Asm.004CE84E ; jmp to mfc42.#6215_CWnd::ShowWindow
                      //出现C32asm的界面  
004487B8    8B57 20         mov edx,dword ptr ds:[edi+20]
004487BB    52            push edx
004487BC    FF15 30674E00     call dword ptr ds:[4E6730]       ; USER32.UpdateWindow
004487C2    8B47 20         mov eax,dword ptr ds:[edi+20]
004487C5    50            push eax
004487C6    FF15 2C674E00     call dword ptr ds:[4E672C]       ; USER32.BringWindowToTop
004487CC    C783 CC090000 01000>mov dword ptr ds:[ebx+9CC],1
004487D6    EB 04          jmp short C32Asm.004487DC

004487DC    FF15 54835300     call dword ptr ds:[538354]
004487E2    EB 08          jmp short C32Asm.004487EC
      
      
②、0045F798 处解码:
      
0045F797    E9 01000000      jmp C32Asm.0045F79D
0045F79C    228B 3DCCE653     and cl,byte ptr ds:[ebx+53E6CC3D]
0045F7A2    0033           add byte ptr ds:[ebx],dh
0045F7A4    C085 FF0F94C0 50   rol byte ptr ss:[ebp+C0940FFF],50
0045F7AB    E8 E0220100      call C32Asm.00471A90
0045F7B0    A1 20D45300      mov eax,dword ptr ds:[53D420]
0045F7B5    83C4 04         add esp,4
0045F7B8    85C0           test eax,eax
0045F7BA    75 49          jnz short C32Asm.0045F805
0045F7BC    6A 01          push 1
0045F7BE    8BCE           mov ecx,esi
0045F7C0    FF15 FC504E00     call dword ptr ds:[4E50FC]  
; c32asm_1.CBCGPToolbarCustomize::EnableUserDefinedToolbars
0045F7C6    8B16           mov edx,dword ptr ds:[esi]
0045F7C8    8BCE           mov ecx,esi
0045F7CA    FF92 E0000000     call dword ptr ds:[edx+E0]
0045F7D0    EB 0A          jmp short C32Asm.0045F7DC
0045F7D2    03CA           add ecx,edx
0045F7D4    81C9 04000000     or ecx,4
0045F7DA    33C0           xor eax,eax
0045F7DC    8B06           mov eax,dword ptr ds:[esi]
0045F7DE    8BCE           mov ecx,esi
0045F7E0    FF50 60         call dword ptr ds:[eax+60]
0045F7E3    EB 0A          jmp short C32Asm.0045F7EF
0045F7E5    03CA           add ecx,edx
0045F7E7    81C9 04000000     or ecx,4
0045F7ED    8BC3           mov eax,ebx
0045F7EF    EB 04          jmp short C32Asm.0045F7F5
0045F7F1    625E 7C         bound ebx,qword ptr ds:[esi+7C]
0045F7F4    E5 EB          in eax,0EB
0045F7F6    08E7           or bh,ah
0045F7F8    CA B9E9         retf 0E9B9
      
修改:

①、当然是把解出的这些代码复进到脱壳后的程序啦  
②、00448797    FF15 50835300     call dword ptr ds:[538350]// NOP 掉  
      
      
————————————————————————
3、004487DC处
      
      
004487DC    FF15 54835300     call dword ptr ds:[538354]//清除上面解出的2处代码
      
修改:
004487DC    FF15 54835300     call dword ptr ds:[538354]//当然是 NOP 掉  
      
      
—————————————————————————————————
4、文件长度校验
      
      
00448806    E8 61600800      call C32Asm.004CE86C; jmp to mfc42.#5186_CFile::Open
0044880B    85C0           test eax,eax
0044880D    0F84 91000000     je C32Asm.004488A4
00448813    8D4D CC         lea ecx,dword ptr ss:[ebp-34]
00448816    E8 4B600800      call C32Asm.004CE866 ; jmp to mfc42.#3318_CFile::GetLength
0044881B    8D4D CC         lea ecx,dword ptr ss:[ebp-34]
0044881E    8BF0           mov esi,eax
00448820    E8 2F600800      call C32Asm.004CE854 ; jmp to mfc42.#1979_CFile::Close
00448825    33C0           xor eax,eax
00448827    81FE 60E31600     cmp esi,16E360//原程序 ESI=000C1A00
0044882D    0F9CC0          setl al
00448830    85C0           test eax,eax
00448832    A3 68E85300      mov dword ptr ds:[53E868],eax
00448837    75 0C          jnz short C32Asm.00448845
      
修改:
      
00448820    E8 2F600800      call <jmp.&mfc42.#1979>
00448825    33C0           xor eax,eax
00448827    BE 001A0C00      mov esi,0C1A00//呵呵,“骗”两下 pll621 老大  
0044882C    90            nop
0044882D    B0 01          mov al,1//手动置1
0044882F    90            nop
00448830    85C0           test eax,eax
00448832    A3 68E85300      mov dword ptr ds:[53E868],eax
00448837    75 0C          jnz short dumped_.00448845
      
      
————————————————————————
5、运行啦   
      
      
73D3B4F3    85C0           test eax,eax
73D3B4F5    74 16          je short mfc42.73D3B50D
73D3B4F7    8B06           mov eax,dword ptr ds:[esi]
73D3B4F9    8BCE           mov ecx,esi
73D3B4FB    FF50 5C         call dword ptr ds:[eax+5C]//RUN  GO GO GO!
73D3B4FE    8BD8           mov ebx,eax
73D3B500    E8 D2BF0000      call mfc42.#1577_AfxWinTerm
73D3B505    5F            pop edi
73D3B506    8BC3           mov eax,ebx
73D3B508    5E            pop esi
73D3B509    5B            pop ebx
73D3B50A    C2 1000         retn 10
     
      
————————————————————————
6、C32ASM.INI
  
  
复制C32ASM.INI文件,重命名为和脱壳后程序相同的文件名.INI,否则没有相应的INI文件反汇编后代码不可显示。
  
  
—————————————————————————————————
五、爆破功能限制
      
      
老妖 担心吓跑偶们,所以大大降低了C32Asm的破解难度,即使如此,想爆破也是很麻烦的;为了找到爆破点可真是费了番工夫。不知道 老妖 喝酒回来后会在下个版本中恢复多少变态陷阱,呵呵,太变态偶就不敢玩啦。 8D
      
      
1、激活灰色菜单
      
      
00447D33    C786 C8090000 01000>mov dword ptr ds:[esi+9C8],1//全局标志  

修改:
00447D33    C786 C8090000 00000>mov dword ptr ds:[esi+9C8],0
      
      
————————————————————————
2、去掉“破坏”代码
      
      
老妖把“自定义”的功能执行代码挪到壳中,然后清除程序中的代码。

①、004873D6    F3:A5          rep movs dword ptr es:[edi],dword ptr ds:[esi]//NOP掉
②、004873E1    F3:A4          rep movs byte ptr es:[edi],byte ptr ds:[esi]  //NOP掉
③、004874C9    F3:A5          rep movs dword ptr es:[edi],dword ptr ds:[esi]//NOP掉
④、004874D1    F3:A4          rep movs byte ptr es:[edi],byte ptr ds:[esi]  //NOP掉
      
      
————————————————————————
3、去掉入壳的(异常)CALL
      
      
①、004487DC    FF15 54835300     call dword ptr ds:[538354]//NOP掉
②、0045F7FF    FF15 54835300     call dword ptr ds:[538354]//NOP掉
③、0045F787    FF15 50835300     call dword ptr ds:[538350]//NOP掉
      
      
在偶脱壳消除暗桩后爆破以上部分即可实现和注册版同样的功能啦。
感谢 pll621 老大!      
     
今天是大年三十,祝大家☆☆春节快乐☆☆  
      
      
—————————————————————————————————
   
                     
      ,    _/  
      /| _.-~/        _    ,      青春都一饷
     ( /~  /          ~-._ |
     `\  _/             ~ )       忍把浮名  
  _-~~~-.)  )__/;;,.       _  //&#39;
  /&#39;_,  --~   ~~~-  ,;;___(  (.-~~~-.      换了破解轻狂
`~ _( ,_..-- (    ,;&#39;&#39; /   ~--  /._`  
  /~~//&#39;  /&#39; `~      ) /--.._, )_  `~
  "  `~"  "    `"    /~&#39;`   `\~~   
                 "    "  "~&#39;  ""

   
    Cracked By jingulong  
    Cracked By 巢水工作坊——fly [OCN][FCG][NUKE][DCM]

          2004-01-21  00:00
人情如冰六月寒,花做一份艳,为谁笑人间? 如果任何人发现我转载的有图像的文章中图像失效或者文章有问题,请及时短消息通知我。先谢谢。::)) coup de foudre

TOP

,  _/
   /| _.-~/      _  ,    青春都一饷
   ( /~  /      ~-._ |
   `\ _/         ~ )     忍把浮名
  _-~~~-.) )__/;;,.     _ //&#39;
/&#39;_,  --~  ~~~- ,;;___( (.-~~~-.    换了破解轻狂
`~ _( ,_..-- (  ,;&#39;&#39; /  ~--  /._`
/~~//&#39;  /&#39; `~     ) /--.._, )_ `~
" `~" "    `"    /~&#39;`  `\~~  
           "  "  "~&#39; ""
fly大哥能成为脱壳的顶尖高手大约和他的精神境界分不开。
因为今天看到http://www.eviloctal.com/forum/htm_data/24/0602/20166.html
东方大哥提供的那个工具。然后发现未注册。作者欢迎破解。
觉得这样的挑战fly不可能不做。结果搜索一下,找到这个文章。

然后搞了一个破解版本,看看和不破解功能基本一样
因为原作者根本好像就没有很刻意的限制功能。就限制了工具自定义。这个很无所谓的。

然后忽然感觉到 老妖 和 fly 都很有意思。
这样有意思的人真得很有意思阿。哈哈
所以转载来这篇文章表示对 两位的敬意。保留了原文章的签名。

请老大们不要删除文章中的签名和我的这个无技术的回复。请求,请求。
致敬!!!祝福!!!
哈哈
[s:66]  [s:66]  [s:66]  [s:66]
人情如冰六月寒,花做一份艳,为谁笑人间? 如果任何人发现我转载的有图像的文章中图像失效或者文章有问题,请及时短消息通知我。先谢谢。::)) coup de foudre

TOP

发新话题