|
[求助]securom8.03脱壳后的一个问题
- -,一块把那个很垃圾的反混淆发上来把 最重要的分支反混淆还没有实现。。。。。不过push ss, pop ss; pushfd这种anti-debug和一般的jmp能清理干净(注意要先清理checksum后再使用)。。。。。 sr8cleaner.rar 同样使用TinyCC编译(工具见前文的securom_src包内) |
|
[求助]securom8.03脱壳后的一个问题
这里再记录一下vm的问题(我实在研究不下去了= =, 权当给后来的大大记录下我走的弯路), vm入口的代码为一段 push yyyy call xxx push xxxx call xx 而push进去的实际上是一个地址,如果追随会发现类似 xx xx xx xx 00 00 00 00 00 00 00 00 00 00 00 00 yy yy yy yy 00 00 00 00 00 00 00 00 00 00 00 00 把xx xx xx xx - yy yy yy yy的代码截出来使用我的vm_disasm进行研究就ok. 总体来说vm的代码功能为 传参 转换参数 xcall x86的代码 --> 这里 接收返回值 转换参数 xcall x86的代码 而这些x86的代码最终会被带到上面PA_REQUEST_xxxxxxxx的请求中, 所以vm代码只是一个障眼法,重点还是pa_request这组在exe中的部分 |
|
[求助]securom8.03脱壳后的一个问题
paul.dll的那个call很好找,本来是返回7的,我让他返回1(或者返回0x10也可以)结果非法操作。。。。。 如果深入exe文件就会发现这个代码不是那么容易搞定的,具体来说; 那个7是靠跟周围的代码运算+xor一个常数得出的,往根源追的的分支语句有很多(都是加了混淆的,代码被切的很短,数量巨大,多的让你懒得分清哪里是分支, 哪里是被故意切开的)。。。。。。。。 --->sr8判断的方式 判断语句(例如cmp %a,%b) pushfd ..... 一段垃圾代码或者是检验 popfd mov [esp], 0xxxxxxxx jz a add [esp], 0xxxxxxxxx 2:add [esp], 0xxxxxxxc3 ->注意这个c3 jmp 到那个c3(即retn) ---->sr8切代码的方式 ...(一段不超过30行的代码【可能是垃圾】) mov [esp], 0xxxxxxxx add [esp], 0xxxxxxxxx 2:add [esp], 0xxxxxxxc3 ->注意这个c3 jmp 到那个c3(即retn) 注意2那个xxxxxxc3如果jmp后会变形为 retn, 这时会将[esp]代码运算的结果作为返回地址(其实是跳转地址) 这是很难追踪的原因,即根本看不出距离的远近,如果手动的计算那些add值就是开10个计算器也不够用的,这就是我写反混淆引擎的初衷。。。。 当然总体感觉不光是那个1的问题(不过最终还是要解决那个01h的问题 ),因为那个01h也是搞代码运算得到的,而从哪里跳转到那里去的,这是一个很重要的问题。 而对于PA模块的请求在exe中的表现,对于pal5来说: 028BC32B 8D6424 FC lea esp, dword ptr [esp-4] <-- 从这里设一个breakpoint, 观察ebx 对应的: 1 PA_REQUEST_GET_UL_REQUEST ---> 28BC5AE 2 PA_REQUEST_SET_UL_CODE ---> 028BC7D1 3 PA_REQUEST_EVAL_UL_CODE ---> 28BCB29 28BCA93 4 PA_REQUEST_SET_SERIAL ---> 28BCCF7 5 PA_REQUEST_GET_SERIAL ---> 28BCF8D 6 PA_REQUEST_GET_EXPIRY_INFO ---> 28BD08F 7 PA_REQUEST_GET_GRACE_INFO ---> 28BD334 8 PA_REQUEST_GET_IS_ONLINE ---> 28BD442 9 PA_REQUEST_ACTIVATE_ONLINE ---> 28BD6DE A PA_REQUEST_VERIFY_ONLINE ---> 28BD836 B PA_REQUEST_IS_REGISTERED ---> 28BDB60 C PA_REQUEST_INIT --> 28BDEEE D PA_REQUEST_INIT --> 28BDFD6 E PA_REQUEST_GETLOGFILENAME ---> 28BE16A F PA_REQUEST_ENABLE_LOG ---> 28BE3ED 12 PA_REQUEST_SET_PADATA_UNLOCK ---> 28BE671 14 PA_REQUEST_GET_PADATA ---> 28BEA23 15 PA_REQUEST_GET_LICENSE ---> 28BEAE9 10 PA_REQUEST_UPDATE_PLAYTIME ---> 028BEC55 最后: 5 PA_REQUEST_GET_SERIAL ---> breakpoint这个28BCF8D地址,会一直来到。。。。。 028C34EF C74424 14 000F8>mov dword ptr [esp+14], 568A0F00 <-- 这里的eax就是07h 如果往上拉可以发现01h是success................暂时记录这些。。。 |
|
[求助]CPU为什么不多做些寄存器呢
如果没有那么广泛的用户群体,x86就什么也不是。。。。。。 |
|
[求助]securom8.03脱壳后的一个问题
拜读过您的脱文, 受益匪浅。 不过还是希望有大神能指点一下sr的详细运作原理,这样大家对pa模块都有一个比较好的入手点....rld最终就没有动paul.dll直接完美计算key crk的,不过想联系上他们估计不太可能呵呵~(e-mail完全失效) |
|
[求助]securom8.03脱壳后的一个问题
感谢您的关注。 我想确认一个问题,就是在有key发现能绕过的情况下是不是只能针对一个game. 如果只针对一个game的话那么还是得逆向pa模块(因为我个人只是想搞清sr8的一个总体运作原理和crk思路, 并不是针对某一款具体的game搞出来玩玩);如果能通用的话恳请您的指点。 vm的确是没有用的,白费了我一星期,目前vm码几乎都能出来,但仔细看都是传参的。。。。 我在写反混淆器,很简单的配对,解的不是很彻底,因为没时间打造一个较完美的代码优化程序。 不过我时间不多了,估计没法放上来了…… |
|
[求助]securom8.03脱壳后的一个问题
arteam的文章很早就拜读了....上边那个vm一部分就是基于arteam文章写的 paul.dll总体感觉是一个外壳而已,关键我没key所以只研究壳没多大用把,也许真有漏洞但没key应该发现不料。。。。。 = =, 基本把国外论坛翻了一遍,目前我都想给rld和skidrow发email, 但地址不是过期了就是找不到,郁闷。。。。 |
|
[求助]securom8.03脱壳后的一个问题
搞定sr8的保护模块。。。或者无key绕过保护模块。。。 那篇有key脱game悬念很小的, 关键是目前我无法达到game的oep(因为无key根本就不会经过game的oep)。。。。 |
|
[调查]有没有人愿意一起写本编译器与虚拟机实践的书
编译理论上经典的教材还是龙书之类的,所以写理论多了没多大用途,实践篇幅越多越好。 从难点上说虚拟机不如编译器,建议编译器的篇幅多一点。 很早就从云风那里知道lua,但没看过具体实现细节,不发表评论。 |
|
[求助]securom8.03脱壳后的一个问题
没太有心情搞下去了,搞过的大神都不理我。。。。 vm反汇编器(比较简单但能解不少handler了- -,可以看看。。。)+代码修复(修正乱跳便于分析vm)的源代码在src.rar里,本来想用ade32引擎然后收集一些变形规则写一个像srom_cleaner的反混淆器(srom_cleaner处理后基本都不能运行,而且对sr8的处理效果不好),不过觉得这工程大了点就不写了。。 代码用tinyCC + nasm编译(所有编译工具都在代码包里, 用tcc纯粹是个人习惯, 本来想用gcc但突然发现我那个是arm版本的). text是脱sr8文(因为很简单就仓促写了点。。。)+arteam的crc clean(本来想把这个实现在自己的反混淆器里的,最后理由同上。。。)。 |
|
[求助] GCC用什么反汇编工具
objdump 静态 gdb动态 |
|
|
|
|
|
[求助]securom8.03脱壳后的一个问题
- -, 我可能表意不清, 我目前脱了sr8的那层壳并且在解密vm而不是game的那层壳,如果脱了那个就没什么了。。。。。 。。。。等我搞定VM可能会把完整脱壳笔记发上来的。。。。 目前在写VM反汇编器。。。。。 0000c40[278b694, 3f] mov4 %189, [%153] 0000c48[277cafb, 44] add4 %153, 68h 0000c54[28868f0, a0] mov4 %143, 1eh 0000c60[288c95e, e1] expr %143 0000c68[28a94a2, 32] mov4 %194, 36d873dh 0000c74[2814708, 37] sub4 %194, 6bbah 0000c80[275e072, 96] cmp4 %189, %194 0000c88[28a94a2, ec] mov4 %13, 5678685eh 0000c94[28868f0, 14] mov4 %14, 90c31234h 0000ca0[27d67ce, e1] push %161 0000ca8[28447ab, 09] push %193 0000cb0[27aef63, 95] push %194 0000cb8[2792ed2, 9d] push %101 0000cc0[2786c67, 5b] push %169 0000cc8[2786c67, f4] push %125 0000cd0[27f2583, 94] push %153 0000cd8[2899a76, 31] stvx ; save v_curr state 0000ce0[2827e83, 6c] xjmp %13 ; jmp to x86 code 0000ce8[27c6277, fb] ldvx ; load v_curr state 0000cf0[2898bb0, bf] xmov %189, %eax ; xreg=1 0000cf8[2898bb0, 8a] xmov %193, %ebx ; xreg=2 0000d00[2803639, e8] xmov %194, %ecx ; xreg=3 0000d08[2869705, b5] xmov %101, %edx ; xreg=4 0000d10[2898bb0, 5f] xmov %169, %edi ; xreg=5 0000d18[2869705, 91] xmov %125, %esi ; xreg=6 0000d20[27767e3, 6f] xmov %153, %ebp ; xreg=7 0000d28[2809c07, f0] sub4 %153, 74h 0000d34[28b0fe2, 2f] add4 %153, d0h 0000d40[2780933, 42] mov4 [%153], %125 0000d48[27f1df1, ae] sub4 %223, 5ch 0000d54[2891b88, 01] bgt 0072f8h ; trigger, h=2795b6c, m=54, f=65a4 0000d64[2782a19, f2] beq 006df4h ; trigger, h=27e70ff, m=ad, f=6090 传递的api参数无效 00072f8[2795b6c, 54] mov4 %0, %0 0007300[277d72b, c2] mov4 %194, 4d238cach 000730c[27fd5a6, 44] cmp4 %194, %189 0007314[27e1a93, f2] bgt 0099e8h ; trigger, h=27e70ff, m=ef, f=26d4 0007324[27e1a93, 39] beq 0094e8h ; trigger, h=27d3d26, m=ef, f=21c4 00009d0[2760a43, bb] ldvx ; load v_curr state 00009d8[27d9f2c, 78] xmov %189, %eax ; xreg=1 00009e0[27ad1ff, 9e] xmov %193, %ebx ; xreg=2 00009e8[2869705, d9] xmov %194, %ecx ; xreg=3 00009f0[27727f2, eb] xmov %101, %edx ; xreg=4 00009f8[2869705, 3c] xmov %169, %edi ; xreg=5 0000a00[2803639, 35] xmov %125, %esi ; xreg=6 0000a08[2803639, 93] xmov %153, %ebp ; xreg=7 0000a10[2793c50, 72] cmp4 %189, %167 0000a18[283c097, 43] mov4 %13, 56786859h 0000a24[281c77c, 52] mov4 %14, 90c31234h 0000a30[27aef63, c5] push %189 0000a38[27ef71d, 71] push %193 0000a40[288c6fa, d4] push %194 0000a48[2786c67, 6f] push %101 0000a50[27e4c25, 6c] push %169 0000a58[27d13ef, 0f] push %125 0000a60[275dabe, c1] push %153 0000a68[27636de, bf] stvx ; save v_curr state 0000a70[27d3a13, b6] xjmp %13 ; jmp to x86 code 0000a78[27c6277, 13] ldvx ; load v_curr state 0000a80[27ec896, 11] xmov %189, %eax ; xreg=1 0000a88[27da302, 5e] xmov %193, %ebx ; xreg=2 0000a90[2881a9f, 30] xmov %194, %ecx ; xreg=3 0000a98[27ad1ff, 59] xmov %101, %edx ; xreg=4 0000aa0[27778d1, 3e] xmov %169, %edi ; xreg=5 0000aa8[2898bb0, 86] xmov %125, %esi ; xreg=6 0000ab0[27da302, 4f] xmov %153, %ebp ; xreg=7 0000ab8[289291e, 8c] bne 00d330h ; trigger, h=27c2354, m=61, f=c878 0000ac8[277d72b, 9c] mov4 %125, 30e91bdh 0000ad4[27aa28b, 5f] add4 %125, f663h 0000ae0[2819edc, 5f] expr %125 0000ae8[27d13ef, ad] push %189 0000af0[288c6fa, e7] push %193 0000af8[278d1ce, e9] push %194 0000b00[27d67ce, cd] push %161 0000b08[27e4c25, cd] push %169 0000b10[27d67ce, 3e] push %161 0000b18[2792ed2, 47] push %153 0000b20[2899a76, a4] stvx ; save v_curr state 0000b28[277d72b, 5f] mov4 %143, 2908220h 0000b34[2872949, 2d] xjmp %143 ; jmp to x86 code 0000b3c[2792cdd, fd] ldvx ; load v_curr state 0000b44[2869705, 0a] xmov %189, %eax ; xreg=1 0000b4c[2758d29, c6] xmov %193, %ebx ; xreg=2 0000b54[27ad1ff, f1] xmov %194, %ecx ; xreg=3 0000b5c[2897de0, 86] xmov %101, %edx ; xreg=4 0000b64[27767e3, f5] xmov %169, %edi ; xreg=5 0000b6c[2869705, ed] xmov %125, %esi ; xreg=6 0000b74[2758d29, b4] xmov %153, %ebp ; xreg=7 0000b7c[275e072, 61] cmp4 %189, %125 0000b84[27c570b, 3c] mov4 %13, 56786859h 0000b90[277d72b, c2] mov4 %14, 90c31234h 0000b9c[27e4c25, 41] push %189 0000ba4[2786c67, 19] push %193 0000bac[278d1ce, 93] push %194 0000bb4[27ef71d, 8a] push %101 0000bbc[27d13ef, a3] push %169 0000bc4[2881877, 42] push %125 0000bcc[275dabe, f2] push %153 0000bd4[278eab0, 1a] stvx ; save v_curr state 0000bdc[27ca28a, ca] xjmp %13 ; jmp to x86 code 0000be4[2792cdd, 51] ldvx ; load v_curr state 0000bec[27ec896, c0] xmov %189, %eax ; xreg=1 0000bf4[2803639, 7a] xmov %193, %ebx ; xreg=2 0000bfc[27d9f2c, b2] xmov %194, %ecx ; xreg=3 0000c04[27da302, 37] xmov %101, %edx ; xreg=4 0000c0c[27727f2, 21] xmov %169, %edi ; xreg=5 0000c14[2869705, c2] xmov %125, %esi ; xreg=6 0000c1c[27767e3, 29] xmov %153, %ebp ; xreg=7 0000c24[279a4cc, 94] bne 00d330h ; trigger, h=27c2354, m=61, f=c70c 0000c34[27f02f3, f7] add4 %153, 68h 0000c40[278b694, 3f] mov4 %189, [%153] 0000c48[277cafb, 44] add4 %153, 68h 0000c54[28868f0, a0] mov4 %143, 1eh 0000c60[288c95e, e1] expr %143 0000c68[28a94a2, 32] mov4 %194, 36d873dh 0000c74[2814708, 37] sub4 %194, 6bbah 0000c80[275e072, 96] cmp4 %189, %194 0000c88[28a94a2, ec] mov4 %13, 5678685eh 0000c94[28868f0, 14] mov4 %14, 90c31234h 0000ca0[27d67ce, e1] push %161 0000ca8[28447ab, 09] push %193 0000cb0[27aef63, 95] push %194 0000cb8[2792ed2, 9d] push %101 0000cc0[2786c67, 5b] push %169 0000cc8[2786c67, f4] push %125 0000cd0[27f2583, 94] push %153 0000cd8[2899a76, 31] stvx ; save v_curr state 0000ce0[2827e83, 6c] xjmp %13 ; jmp to x86 code 0000ce8[27c6277, fb] ldvx ; load v_curr state 0000cf0[2898bb0, bf] xmov %189, %eax ; xreg=1 0000cf8[2898bb0, 8a] xmov %193, %ebx ; xreg=2 0000d00[2803639, e8] xmov %194, %ecx ; xreg=3 0000d08[2869705, b5] xmov %101, %edx ; xreg=4 0000d10[2898bb0, 5f] xmov %169, %edi ; xreg=5 0000d18[2869705, 91] xmov %125, %esi ; xreg=6 0000d20[27767e3, 6f] xmov %153, %ebp ; xreg=7 0000d28[2809c07, f0] sub4 %153, 74h 0000d34[28b0fe2, 2f] add4 %153, d0h 0000d40[2780933, 42] mov4 [%153], %125 0000d48[27f1df1, ae] sub4 %223, 5ch 0000d54[2891b88, 01] bgt 0072f8h ; trigger, h=2795b6c, m=54, f=65a4 0000d64[2782a19, f2] beq 006df4h ; trigger, h=27e70ff, m=ad, f=6090 sr8_vm reg.vm 0 d330 27c2354 61 sr8_vm reg.vm 0 72f8 2795b6c 54 00072f8[2795b6c, 54] mov4 %0, %0 0007300[277d72b, c2] mov4 %194, 4d238cach 000730c[27fd5a6, 44] cmp4 %194, %189 0007314[27e1a93, f2] bgt 0099e8h ; trigger, h=27e70ff, m=ef, f=26d4 0007324[27e1a93, 39] beq 0094e8h ; trigger, h=27d3d26, m=ef, f=21c4 sr8_vm reg.vm 0 99e8 27e70ff cc sr8_vm reg.vm 0 94e8 27d3d26 cc 但几乎一个指令一个handler,而且每个指令的执行要依靠前一条指令的参数,追根溯源的方法用起来不方便。。。。。郁闷。。。。 s组的绕过估计是建立在正版KEY激活流程的分析和paul.dll对exe参数输入的基础上。。。。 但我没这个条件,只能硬解码vm..... |
|
|
|
|
|
[求助]securom8.03脱壳后的一个问题
= =, 那个问题差不多解决了。。。能跑出界面了, 就是anti-dumps太多了,也不知道目前dump的是不是完整的 = =。。。。(看某文说sr7的那个unpack是没有附加段的,比较memory map好像也是这样子。。。。。) 而且有一段巨长的stolen code,得写工具。。。。(已经写了一个临时的查看工具不过看了代码觉得很奇怪= =。。。) 本以为上追状态机可以追到代码,但那个结构一次又一次的copy啊,最后追到某离线激活状态机,ebx的内容如果一直hard-code到10h就success,不过还是过了PA模块的。。。PA模块还不知道在哪里= =,真没心情往上追了。。。。 028C1EB6 895C24 0C mov dword ptr [esp+C], ebx 还是请大大指点下啊。。。。这样跟不知跟到什么时候。。。。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值