• 标 题:老妖的 C32Asm V0.4.12 脱壳+修复+破解
  • 作 者:fly
  • 时 间:2004-1-21 周三, 下午7:49
  • 链 接:http://bbs.pediy.com

下载地址:  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 老大!         
      
今天是大年三十,祝大家☆☆春节快乐☆☆  
        
        
—————————————————————————————————
    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一饷
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        换了破解轻狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

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

               2004-01-21  00:00