首页
论坛
课程
招聘
*BLocalize脱壳
2006-5-21 15:04 7105

*BLocalize脱壳

2006-5-21 15:04
7105
【文章标题】: *BLocalize脱壳未破解
【文章作者】: Winter[CZG][D.4s][BCG]
【软件名称】: *BLocalize
【下载地址】: 国产软件,不便公布
【加壳方式】: Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
【使用工具】: OD,ArmInline,ArmadilloFindProtected,Peid,ImpRec,lordpe,peditor
【操作平台】: Win2003
【软件介绍】: 是个汉化工具
【作者声明】: 只是学习脱Armadillo以及ArmInline使用,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  脱壳参考了fly大侠的"ArmInline――Armadillo客户版Code Splicing+Import Table Elimination的简便修复方法"以及cyto大侠的"[Armadillo][Import Table Elimination+Code Splicing]WebCrypt Pro 2000 v5 "在这里向他们致敬。

!- Protected Armadillo
<Protection Options>
Debug-Blocker
Enable Import Table Elimination
Enable Strategic Code Splicing
Enable Nanomites Processing
<Backup Key Options>
Fixed Backup Keys
<Compression Options>
Better/Slower Compression

  
  【寻找OEP】
  OD载入,停在这里:
  00A6AC43 >/$  55            PUSH EBP
  00A6AC44  |.  8BEC          MOV EBP,ESP
  00A6AC46  |.  6A FF         PUSH -1
  00A6AC48  |.  68 903FA900   PUSH VBLocali.00A93F90
  00A6AC4D  |.  68 80A9A600   PUSH VBLocali.00A6A980                   ;  SE 处理程序安装
  
  下断:bp OpenMutexA,F9一次,关注一下堆栈:
  0012F7A4   0012FDD8  ASCII "CE4::DAC4137318"
  
  然后ctrl+G来到401000,写入如下代码:
  00401000    60              PUSHAD                                     //这里新建EIP
  00401001    9C              PUSHFD
  00401002    68 D8FD1200     PUSH 12FDD8                              ; //这里是堆栈看到的 ASCII "CE4::DAC4137318"
  00401007    33C0            XOR EAX,EAX
  00401009    50              PUSH EAX
  0040100A    50              PUSH EAX
  0040100B    E8 105A417C     CALL kernel32.CreateMutexA
  00401010    9D              POPFD
  00401011    61              POPAD
  00401012  - E9 1062417C     JMP kernel32.OpenMutexA
  00401017    90              NOP
  
  二进制代码:60 9C 68 D8 FD 12 00 33 C0 50 50 E8 10 5A 41 7C 9D 61 E9 10 62 41 7C 90
  
  F9一次断下后取消断点,下断bp GetModuleHandleA+5,然后观察堆栈:
  0012EF2C  /0012EF64
  0012EF30  |773D7FF9  返回到 773D7FF9 来自 kernel32.GetModuleHandleA
  0012EF34  |77372E84  ASCII "kernel32.dll"
  
  0012EF70  /0012EF90
  0012EF74  |773D5246  返回到 773D5246 来自 kernel32.GetModuleHandleA
  0012EF78  |77372E84  ASCII "kernel32.dll"
  0012EF7C  |7C8284FF  kernel32.GetProcessHeap
  
  0012F738  /0012F7A0
  0012F73C  |00A558F3  返回到 VBLocali.00A558F3 来自 kernel32.GetModuleHandleA
  0012F740  |00000000
  0012F744  |7C82B3C8  返回到 kernel32.7C82B3C8 来自 ntdll.ZwOpenMutant
  
  00129524  /0012EC6C
  00129528  |01317105  返回到 01317105 来自 kernel32.GetModuleHandleA
  0012952C  |0132BC1C  ASCII "kernel32.dll"
  00129530  |0132CEC4  ASCII "VirtualAlloc"
  
  00129524  /0012EC6C
  00129528  |01317122  返回到 01317122 来自 kernel32.GetModuleHandleA
  0012952C  |0132BC1C  ASCII "kernel32.dll"
  00129530  |0132CEB8  ASCII "VirtualFree"      //到这里注意,shift+F9经过一次异常
  
  00129288  /00129528
  0012928C  |01305FC9  返回到 01305FC9 来自 kernel32.GetModuleHandleA
  00129290  |001293DC  ASCII "kernel32.dll"     //取消断点,alt+F9返回
  
  01305FE3    FF15 BC623201   CALL DWORD PTR DS:[13262BC]              ; kernel32.LoadLibraryA
  01305FE9    8B0D AC403301   MOV ECX,DWORD PTR DS:[13340AC]
  01305FEF    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
  01305FF2    A1 AC403301     MOV EAX,DWORD PTR DS:[13340AC]
  01305FF7    391C06          CMP DWORD PTR DS:[ESI+EAX],EBX
  01305FFA    0F84 2F010000   JE 0130612F                           //Magic Jump ,改成JMP,然后往下找
  
  01306144   /EB 03           JMP SHORT 01306149                    //在这里下个断点,运行断下后撤消刚刚的修改
  01306146   |D6              SALC
  01306147   |D6              SALC
  
  继续下断:bp GetCurrentThreadId
  00128DE4   76084546  /CALL 到 GetCurrentThreadId 来自 MSASN1.76084540
  
  00128DF4   779F8D5A  /CALL 到 GetCurrentThreadId 来自 WININET.779F8D54
  
  00128E20   71B110B6  /CALL 到 GetCurrentThreadId 来自 WSOCK32.71B110B0
  
  00128DD4   755BACDC  /CALL 到 GetCurrentThreadId 来自 MFC42.755BACD6
  
  0012F720   013063D4  /CALL 到 GetCurrentThreadId 来自 013063CE       //这样可以取消断点返回了
  
  013063D4    50              PUSH EAX                                 //回到这里
  013063D5    FF75 FC         PUSH DWORD PTR SS:[EBP-4]
  013063D8    E8 05000000     CALL 013063E2
  013063DD    83C4 0C         ADD ESP,0C
  013063E0    C9              LEAVE
  013063E1    C3              RETN                                    //单步开始跟
  
  0131F9D9    8B50 60         MOV EDX,DWORD PTR DS:[EAX+60]
  0131F9DC    3350 44         XOR EDX,DWORD PTR DS:[EAX+44]
  0131F9DF    3350 1C         XOR EDX,DWORD PTR DS:[EAX+1C]
  0131F9E2    2BCA            SUB ECX,EDX
  0131F9E4    FFD1            CALL ECX                                 //跟到这里,F7进去,到了OEP
  0131F9E6    8945 E4         MOV DWORD PTR SS:[EBP-1C],EAX
  
  00468B8A    55              PUSH EBP                               //就是这里了
  00468B8B    8BEC            MOV EBP,ESP
  00468B8D    6A FF           PUSH -1
  00468B8F    68 40A75100     PUSH VBLocali.0051A740
  
  【修复Strategic Code Splicing】
  如果你使用老版本的Arminline,接下来的东西要自己找,新版的会自动找:)
  首先打开OD菜单,附加进程,找到这个:未命名的窗口, 条目 32
   进程=00000A94
   名称=*BLocalize
  记下ID,alt+M打开内存窗口,找到401000那行,记下大小10E000,打开ArmInline,选择进程并填入刚刚得到的信息。

  回到OD,ctrl+B,填入E9,勾选寻找,找到这里:
  0040100F  - E9 ECEFBD03     JMP 03FE0000      //注意,这个数字每次都在变
  仍旧alt+M打开内存窗口,找到这个段以及它的大小,填入窗口:
  AMEMORY, 条目 69
   地址=03FE0000
   大小=00020000 (131072.)
   属主=         03FE0000 (自身)
   区段=
   类型=Priv 00021020
   访问=R E
   初始访问=RWE
  
  点击"Remove Splice",修复完成以后进入下一步,如果出错,请多试几次,也有可能要从头来。

  
  【修复Import Table Elimination】
  随便找个函数调用,可以看到输入表,在命令行输入dd 389118,注意找上下界,很容易可以发现rva:3883f0 大小:16C8
  要为ArmInlie找个空白地方写输入表,Alt+M,选择这个:
  AMEMORY, 条目 24
   地址=0050F000
   大小=0002E000 (188416.)
   属主=VBLocali 00400000
   区段=.rdata
   类型=Imag 01001002
   访问=R
   初始访问=RWE
  双击打开,查找kernel32.dll,不要选整个块,发现00539DDC是个好地方:
  00539DCC  4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00  KERNEL32.dll....
  00539DDC  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  00539DEC  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  00539DFC  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  
  在ArmInline填入相关信息后点击"Rebase IAT"按钮,一会就修好了。

  
  【脱壳,修复】
  Nanomites保护似乎没有出现,到这里可以用lordpe脱壳了,然后打开ImpRec,选择进程,OEP填入:00068B8A,自动搜索,获得输入表完全有效,修复。
  修复完可以运行,删除reloc,reloc1,vmp0,text1区段后重建程序,可以运行,到此结束。
  脱壳后文件没有次数限制了,但似乎仍有功能限制,是arm带key的程序,无key脱了功能也不完整,鉴于国产软件,不讨论为妙。

一蓑烟雨可以访问了,严重BS攻击者。
  
--------------------------------------------------------------------------------

                                                       Winter[CZG][D.4s][BCG]
                                                       2006年05月21日 14:51:49

[2022冬季班]《安卓高级研修班(网课)》月薪三万班招生中~

收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
误入楼台 活跃值 1 2006-5-21 15:10
2
0
学习中
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风球 活跃值 2006-5-21 15:19
3
0
哈```一个不错的*B工具
好文学习了```
雪    币: 60
活跃值: 活跃值 (128)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2006-5-21 15:29
4
0
Enable Nanomites Processing

没有CC ?
雪    币: 245
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
Winter-Night 活跃值 5 2006-5-21 15:48
5
0
最初由 fly 发布
没有CC ?

貌似是没有,脱壳异常顺利
也可能火候不到家,学习两天Nanomites再回来看看=.=
雪    币: 200
活跃值: 活跃值 (196)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2006-5-21 17:40
6
0
最初由 fly 发布
没有CC ?


没有,这个东西也就是VBLocalize,壳好脱,爆不好做!

不过偶和一刀搞定了最新半了
雪    币: 200
活跃值: 活跃值 (196)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2006-5-21 17:57
7
0
最初由 Winter-Night 发布
修复完可以运行,删除reloc,reloc1,vmp0,text1区段后重建程序,可以运行,到此结束。


还可以优化的:
雪    币: 245
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
Winter-Night 活跃值 5 2006-5-21 18:04
8
0
最初由 KuNgBiM 发布
还可以优化的:


没有,这个东西也就是VBLocalize,壳好脱,爆不好做!
不过偶和一刀搞定了最新半了

老K偷偷指点下
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lostandget 活跃值 2006-5-21 18:19
9
0
下断:bp OpenMutexA,F9一次,关注一下堆栈:

我在这里下断的时候。提示内存不能读取。。。。。。。怎么搞的啊?
bp OpenMutesA 是插件么?
设置OD异常忽略。是在调试设置里设置的么?
----------------------------------------------
欢迎大家加群交流。群号:18952338 群里没什么人。等待各位高手的光临指导。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风球 活跃值 2006-5-21 18:33
10
0
JMP暴破一处,不知还有没有其它的限制```发现了个API不知是不是都与ARM的KEY有关的
雪    币: 200
活跃值: 活跃值 (196)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2006-5-21 19:59
11
0
最初由 Winter-Night 发布
老K偷偷指点下


我只扒了它的“皮(壳)”,抽了它的“血(优化)”(这步一刀叫我做成动画了,到时找他要)

“屠宰分割(破解)”是一刀兄干的

你要破解版联系我!kungbim@163.com  
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
cyto 活跃值 31 2006-5-21 21:01
12
0
ArmInline的确强大,可惜CC修复在我家搞不定。
雪    币: 200
活跃值: 活跃值 (196)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 活跃值 66 2006-5-21 22:59
13
0
最初由 machenglin 发布
学习了一下,这个ARM有些变态,特别是注册界面是ARM的注册机制考虑是否脱壳中已经饶过去了?!
继续跟踪中。。。。。。



是的,它调用了Arm的注册算法机制,它在中间是用的VMP保护形同虚设,没什么作用
雪    币: 10004
活跃值: 活跃值 (1380)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
LOCKLOSE 活跃值 2 2006-5-22 07:15
14
0
爆破不会陷入ARM注册机制里面去。其实并不难。
担心软件作者不在升级所以不发布&继续讨论的为好~
雪    币: 245
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
Winter-Night 活跃值 5 2006-5-23 12:52
15
0
最初由 machenglin 发布
学习了一下,这个ARM有些变态,特别是注册界面是ARM的注册机制考虑是否脱壳中已经饶过去了?!
继续跟踪中。。。。。。

machenglin 兄,如何在脱壳中绕过,可否以例子说明?本软件不适合的话,可否借鉴其他相仿例子?多谢
游客
登录 | 注册 方可回帖
返回