首页
论坛
课程
招聘
[原创]VA_X inline Patching
2009-5-8 22:24 8329

[原创]VA_X inline Patching

2009-5-8 22:24
8329
【文章标题】: VA_X inline Pathcing
【文章作者】: yangjt
【作者邮箱】: [email=yangjietao123@163.com]yangjietao123@163.com[/email]
【作者主页】: http://blog.sina.com.cn/yangjt
【作者QQ号】: 325002492
【软件名称】: VA_X
【加壳方式】: Armadillo
【操作平台】: Win Vista+ Win XP
【前   传】: BRD 5·1的时候很过分……
【修改说明】: 自己做起来才发现不是那么回事……本着认真负责的态度……我来重写这篇文章^_^
--------------------------------------------------------------------------------
【详细过程】
原理就是Hook ArmAccess.dll输入表里的VirtualProtect,因为解码后程序会N次调用到这个函数……所以我们把它给改到我们的代码上,然后就可以为所欲为了……(^_^)当然中间还需要处理Arm的CRC校验。所以如何处理……请听我慢慢说来
First Step:
prepare
  patch 代码前要做一些准备工作
  用PeEditor把程序的.text段和.adata段的属性加上可写属性,因为代码需要对这两段进行SMC,如果不能写就会出现页保护错误
  之后OllyICE打开程序,下那个经典的断点VirtualProtect,锁定程序解码ArmAccess.dll时对其区段进行的页保护设定
  这段代码长成这个样子:
  

1F25A53C . C745 B8 04000>mov dword ptr [ebp-48], 4
1F25A543 . EB 07 jmp short 1F25A54C
1F25A545 C745 B8 02000>mov dword ptr [ebp-48], 2
1F25A54C > 8B55 E0 mov edx, dword ptr [ebp-20]
1F25A54F . 8B45 F4 mov eax, dword ptr [ebp-C]
1F25A552 . 0342 0C add eax, dword ptr [edx+C]
1F25A555 . 8945 A8 mov dword ptr [ebp-58], eax
1F25A558 . 8B4D E0 mov ecx, dword ptr [ebp-20]
1F25A55B . 8B51 08 mov edx, dword ptr [ecx+8]
1F25A55E . 8955 B0 mov dword ptr [ebp-50], edx
1F25A561 . 8D45 BC lea eax, dword ptr [ebp-44]
1F25A564 . 50 push eax ; /pOldProtect
1F25A565 . 8B4D B8 mov ecx, dword ptr [ebp-48] ; |
1F25A568 . 51 push ecx ; |NewProtect
1F25A569 . 8B55 B0 mov edx, dword ptr [ebp-50] ; |
1F25A56C . 52 push edx ; |Size
1F25A56D . 8B45 A8 mov eax, dword ptr [ebp-58] ; |
1F25A570 . 50 push eax ; |Address
1F25A571 . FF15 7030291F call dword ptr [<&KERNEL32.VirtualPro>; \VirtualProtect

  查一下MSDN就不难发现0x02是PAGE_READONLY,顺便也看下PAGE_EXECUTE_READWRITE,嗯……这个值是0x40
  好下面让我们继续分析
  1F25A545      C745 B8 02000>mov     dword ptr [ebp-48], 2
  这句代码很诡异……因为它的作用……很显然嘛,把页保护属性装载到某个神秘的地方,这句不Patch到最后Hook ArmAccess.dll里的VirtualProtect就要出错。
  把0x02Patch成0x40就OK啦~~嗯……第一部分工作完成……保存此处修改……休息下眼睛^_^
  
  
  
  第二部分开工咯~~
  patch 代码要写到.adata 段
  original:
  1F259A2C  |.  A1 04A1291F   mov     eax, dword ptr [1F29A104]
   
  patch:
  
call @patch


@patch:
mov eax, dword ptr [1F29A104];恢复原始句
pushad
mov ds:Var1,eax
mov [eax+572ec],//push @@1&ret 的机器码
mov [eax+572ec],//push一不够两次
popad
ret
////////////////////////////////////////////////
@@1:
pushad
mov eax,ds:Var1
mov [eax+572ec],8B10C483//恢复var1+572ec处的机器码
mov [eax+572F0], 5DE5
mov dword ptr [eax+441FD], 28306D68//push @@2&ret 的机器码
mov word ptr [eax+44201], 0C31F//push一不够两次
add eax, 572EC
mov ds:Var2, eax//存入Var2
popad
push ds:Var2//这里直接jmp ds:Var2咋样?
retn
//////////////////////////////////////////////////////
@@2:
pushad
mov eax,ds:Var1
mov dword ptr [eax+441FD], 33504233/////fix code
mov word ptr [eax+44201], 7C41////////////fix code
mov dword ptr [eax+6E124], 1F2830C5/////Offset @@3Hook VirtualProtect
add eax, 441FD
mov ds:Var2, eax/////重新保存Var值
popad
mov dword ptr [ebp-4], EA0CDE28//recover 4th CRC5 to normal
mov dword ptr [ebp-C], C47B06E4//recover 4th CRC4 to normal
mov dword ptr [ebp-10], 9BEFF589//recover 4th CRC3 to normal
mov dword ptr [ebp-14], A0901CA0//recover 4th CRC2 to normal
mov dword ptr [ebp-18], 0BB997E9//recover 4th CRC1 to normal
push ds:Var2, eax//jmp ds:Var2
retn
//////////////////////////////////////////////////////
@@3:
pushad
pushfd
cmp dword ptr [MigrateDevColor+1072F0h], 0///////1EDC8550 ; Exported entry 17. MigrateDevColor
je next
;1EECF840 6A FF push -1
;
;1EECF840 33C0 xor eax, eax
;1EECF842 40 inc eax
;1EECF843 C3 retn
;
;mov eax,1
mov dword ptr [1EECF840], C340C033///find call witch call it and patch it with bin code of 'mov eax,1'
mov byte ptr [EditControlW+0C1EFh], 0EBh/// Exported entry 11. EditControlW
mov byte ptr [EditControlW+0C245h], 0EBh//p.s.这里地址可能不一样……要自己找的……
mov byte ptr [EditControlW+0C282h], 0EBh
mov byte ptr [EditControlW+0C2A3h], 0EBh
mov byte ptr [EditControlW+0BF93h], 0EBh
next:
popfd
popad
jmp VirtualProtect

  
  比如拿1727做实例就应该这样写代码
  

0x1F2A7360:
mov eax, dword ptr [1F2BE104]
pushad
mov dword ptr [1F2A7500], eax
mov dword ptr [eax+572EC], 2a738768
mov dword ptr [eax+572F0], 0C31F
popad
jmp 1F27DA31
pushad
mov eax, dword ptr [1F2A7500]
mov dword ptr [eax+572EC], 8B10C483
mov dword ptr [eax+572F0], 0C35DE5
mov dword ptr [eax+441FD], 2A73C868
mov word ptr [eax+44201], 0C31F
add eax, 572EC
mov dword ptr [1F2A7504], eax
popad
jmp dword ptr [1F2A7504]
pushad
mov eax, dword ptr [1F2A7500]
mov dword ptr [eax+441FD], 33504233
mov word ptr [eax+44201], 7C41
mov dword ptr [eax+6E124], 1F2A7422
add eax, 441FD
mov dword ptr [1F2A7504], eax
popad
mov dword ptr [ebp-4], 8A86794A
mov dword ptr [ebp-C], 0xC2123907
mov dword ptr [ebp-10], 0xA5BA06EE
mov dword ptr [ebp-14], 56F72581
mov dword ptr [ebp-18], 6109DF09
jmp dword ptr [1F2A7504]
pushad
pushfd
cmp dword ptr [1EDD0EE0], 0
je 1F2A7453
mov dword ptr [1EEE4800], 0C340C033
mov byte ptr [1ED552FF],0EB
mov byte ptr [1ED55355],0EB
mov byte ptr [1ED55392],0EB
mov byte ptr [1ED553B3],0EB
popfd
popad
jmp dword ptr[1F2B7070]

  
--------------------------------------------------------------------------------
【经验总结】
  @@3的部分可以用自己的方法代替,比如说用y3y3y3的方法,和我以前所写过的方法,最后Patch完了别忘了jmp
  btw:不能使用SetEnvironmentVariable的方法=.=当然脱了壳以后可以Set下面这两个
  "DAYSLEFT"
  "DAYSINSTALLED"
  至于VirtualProtect,这个API Armadillo自己就用到的,可以jmp dword ptr[.....]
  在这里说明下……那个4th CRC是用ArmaCRC找出来的,文件在附件里

  附带附件为Patch,直接打上即可。算是一个礼物吧……不收费啦~~
  祝天下所有的父亲节日快乐哈~~
  后传:构建和谐社会,人人有责……^_^
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年06月21日 12:43:52

安卓应用层抓包通杀脚本发布!《高研班》2021年3月班开始招生!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 502
活跃值: 活跃值 (18)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
yangjt 活跃值 10 2009-5-8 22:32
2
0
雷死我了……标题我也能打错……囧
雪    币: 203
活跃值: 活跃值 (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
coolboy 活跃值 2009-5-9 00:44
3
0
支持~~出个视频教程就更好了~~~~~~~~~~
雪    币: 309
活跃值: 活跃值 (104)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 活跃值 4 2009-5-9 01:19
4
0
学习inline。
雪    币: 134
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
swlepus 活跃值 2009-5-9 09:44
5
0
BRD的inline patch好像是最可靠的。
支持楼主的研究。
雪    币: 502
活跃值: 活跃值 (18)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
yangjt 活跃值 10 2009-6-21 13:12
6
0
本着认真负责的态度,修改文章中的错误……^_^
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
授人以愚 活跃值 2009-6-22 09:23
7
0
毫无破解基础,勉强跟着学一下吧,估计应该是学不会啊,谢谢楼主!
雪    币: 221
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iidioter 活跃值 2009-6-22 09:38
8
0
支持楼主的研究。
游客
登录 | 注册 方可回帖
返回