通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 爱心红客 电信网通铁通移动 在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络攻防 >> 文章正文
Armadillo 2.5x 加壳的Konvertor 3.13脱壳
责任编辑:酷酷の鱼   更新日期:2008-5-11
 

来源:安全中国

Armadillo 2.5x 加壳的Konvertor 3.13脱壳 
crack by fwnl 
软件说明:是一个图片、音乐、文字及影音格式文件的转换程序,它总共可以转换135种文件格式,包含25种音乐格式、4种影音格式、105种图片格式及1种文字格式。 
破解工具:trw2000,Import REConstructor v1.4.2+ ,winhex10.45, Peditor 1.7. 

    首先要谢谢hying,leo_cyl,yahoo007,电神等大哥,因为这篇文章中的内容是按他的研究成果来写的. 
特别是yahoo007大哥给了我不少帮助,也要谢谢hying大哥给我的Konvertor 3.12A的输入表. 
    由于最后输入表的问题并没有完美解决,所以还希望各位说说手动修复输入表的方法和技巧,因为这 
方面的资料真是太少了,这也是我写这篇文章的初衷之一吧,谢谢 

一.找oep 
方法一: 
    这种方法是按leo_cyl上次的脱文来找的,原理请看leo_cyl写的Armadillo 2.52的脱文(强烈建义 
脱壳前看看,并搞清楚原理) 

  首先用trw2000载入主程序,下 bpx createprocessa. F5返回程序被中断,下Pmodule返回程序中 
然后Ctrl+↓ 向下看 

0187:00909B06  CALL    `KERNEL32!WaitForDebugEvent`  //看到这个就不远了 
0187:00909B0C  TEST    EAX,EAX 
0187:00909B0E  JZ      NEAR 0090A128 
0187:00909B14  MOV      DWORD [EBP+FFFFFD70],00911468 
............. 
............. 
注意下面的这几句格式,在别的加壳程序中也是差不多的 
0187:00909CB7  MOV      ECX,[EBP+FFFFFE74]      
0187:00909CBD  CMP      DWORD [ECX+0C],C0000005 
0187:00909CC4  JNZ      NEAR 00909E89 
0187:00909CCA  MOV      EDX,[EBP+FFFFFE74] 
0187:00909CD0  CMP      DWORD [EDX+5C],BYTE +00    //下断在这里 
0187:00909CD4  JZ      00909CE2 
0187:00909CD6  MOV      DWORD [EBP+FFFFFD70],009114E8 

于是bpx 909cd0, f5返回,程序中断在00909CD0 下dd edx+18,再按一下F5可看见oep-> 474e06 

方法二: 
  这种方法是按电神大哥说的方法来找的: 

  首先用trw2000载入主程序,bpx VirtualProtect,,在最后一次被中断后,下Pmodule返回程序,然后F10 
单步走,当走到遇上的第2个call时,F8进入,然后F10单步走,直到走到call edi, 
edi的值就是oep-> 474e06 
    注意:开始 bpx virtualprotect 时,其中会中断很多次,这个程序在我机子上是中断 91 次, 
所以我就是从第 91 中断后开始 F10单步走的. 
  
二.初步脱壳 
    这里我是用的hying大哥的方法,因为leo_cyl上次的脱文中的意思我还没有搞明白,那篇文中谈到的几个 
关键点在这个程序中我没找到 :( 

下面的事就是要把hying大哥说的一段代码写入到程序里 
6804000000 push    PAGE_READWRITE 
6800100000 push    MEM_COMMIT 
6800005800 push    580000h  <-用peditor看程序的size of image ,我这里看到是57f000,大一点就写 
6800000000 push    0                                                                580000h 
xxxxxxxxxx call    VirtualAlloc    <-申请内存 
          mov    edi,eax      
          mov    ecx,57e000      <- size of image-1000h= 57e000 
          mov    esi,401000h      <-基址加1000h,有的程序不是这个值 
          rep  movsb 
    载入程序,按一下F10,看看当前的地址,我的是90b7d9, 于是d 90b7d9, Alt+↓ 向下看 
看到 910F64处内存有一片 00 00 00 00 00 

    重新载入程序.bpx VirtualAlloc,Pmodule返回程序中,code on,可是看到 
      Call KERNEL32! VirtualAlloc前的代码,我机子上是 FF1528019100 

    然后,再重新载入程序, d 910F64 再 u 910F64,在内存窗口开始填入680400000068001000006800005800 
6800000000FF1528019100,可看见下面内容, 再A 910f7e 回车写入 mov edi,eax 就可知代码为 89c7 
后面的也是这样,最后可见代码窗口为下面这样: 
0187:00910F64 6804000000      PUSH    DWORD 04 
0187:00910F69 6800100000      PUSH    DWORD 01000 
0187:00910F6E 6800005800      PUSH    DWORD 00580000 
0187:00910F73 6800000000      PUSH    DWORD 00 
0187:00910F78 FF1528019100    CALL    `KERNEL32!VirtualAlloc` 
0187:00910F7E 89C7            MOV      EDI,EAX 
0187:00910F80 B900E05700      MOV      ECX,0057E000 
0187:00910F85 BE00104000      MOV      ESI,00401000 
0187:00910F8A F3A4            REP MOVSB 
0187:00910F8C 0000            ADD      [EAX],AL 

    用Peditor 1.7打开原加壳程序,点FLC,在virtual Address 填入910f64,点do! 可知offset(hex)为3BF64 
    
    用winhex打开原加壳程序,从3BF64开始写入      6804000000680010000068000058006800000000FF152801910089C7B900E05700BE00104000F3A4 
保存后用trw2000打开这个被修改的程序,bpx 474e06 ,中断后 r eip 910f64 ,然后f10单步走,走到00910F7E 
时记下eax的值,我机子上是5560000,继续走到 910f8c时,下命令 w 5560000  5ADE000 c:\ppp.bin 
                      (5560000+57E000=5ADE000) 
然后 r eip 474e06,F5返回,关闭程序 

  这时我们载入原加壳程序,bpx 474e06, f5返回中断,pedump脱出程序test.exe 
用winhex分别打开test.exe和ppp.bin,在test.exe的offset 1000处开始,用ppp.bin替换下面的数据
替换的长度就是ppp.bin的长度,然后保存. 

三.修复输入表 
    这部分对我来说太难了,因为工具并不能完全解决.我的方法是: 
    在Import REConstructor v1.4.2+ 的 Attach to an Active Process 窗口中选取加壳程序的进程,有2个进程选上面的一个,然后在下方的oep处填入00074e06,点IAI AutoSearch,再点Get Imports,然后点Auto Trace,然后点看还有多少地址是NO,剩下的事就是手动找这些函数了. 

hying大哥说过  CreateEventW 
              GetStringTypeA 
如果发现这两个函数连续在一起的话,上面一个该改为GetStringTypeW 

手工修复修入表后,程序应能运行了,好像也就不用注册了,可是注册部分在壳中,壳脱了注册也就不用了 

    这程序的输入表我是手工找到一部分,然后参照hying大哥给我的Konvertor 3.12A的输入表修复的 

    真希望那位能说说手工输复输入表,因为没有谁具体说过,都是很抽象的,向我这样菜鸟根本搞不明白, 
我看了很多资料也只看到,BPX GetVersion ,然后在u 那些未解决的地址,再看看上面或下面,找出正确的函数.但是并不是所有的都能这样解决. 

    因为是初次接触Armadillo的壳,所以中文错误和不足之处可能不少,希望各高手指正,那样就太谢谢了 

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 企业网络组建与维护班正式开课
    普通文章 北京网络行业协会、江民科技联合发布05月11日病毒播报
    普通文章 Opera发布Dragonfly Alpha版 完全开源
    普通文章 “.ORG”域名年费将上涨10
    普通文章 PC Tools称Vista安全性差于Win 2000
    普通文章 卡巴斯基新版解除PPLive误报问题
    普通文章 新方法帮你识隐藏木马
    普通文章 消除局域网内使用QQ后带来的安全隐患
    推荐文章 推荐:SSClone非ARP会话劫持原理分析
    普通文章 教你将文件秘密加密隐藏在图片中
    热门文章
    普通文章中国可信计算标准TCM申请国标获实质通过
    普通文章美国又一垃圾邮件发送者被判刑
    普通文章恶意软件也有版权
    普通文章2007年手机短信息调查报告
    普通文章“家乐福”被北京网监处屏蔽
    普通文章IE用户减少,黑客盯上Safari 和Firefox
    普通文章Avast出错:uTorrent成木马
    普通文章微软对DNS漏洞未予以足够重视
    普通文章木马编程DIY之系统服务
    普通文章服务器管理 向远程维护要效率
    精彩专题