首页
社区
课程
招聘
[ReverseMe挑战赛]ReverseMe提交
发表于: 2014-10-6 11:41 12770

[ReverseMe挑战赛]ReverseMe提交

2014-10-6 11:41
12770
收藏
免费 3
支持
分享
最新回复 (28)
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
2
感谢参与 其实是个人认为到目前为止逆向的最出色的一份答案 不过请再检查一下正确性
2014-10-6 14:54
0
雪    币: 21
活跃值: (514)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
3
谢谢版主提醒
重新修改了一下

ReverseMe2.zip
上传的附件:
2014-10-6 22:16
0
雪    币: 47147
活跃值: (20490)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
活动结束,答案移出来了。
具体参考活动发起帖:http://bbs.pediy.com/showthread.php?t=192742
2014-10-8 10:12
0
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
5
牛X,连明文字符串都逆出来了
2014-10-8 12:02
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
这个答案有点假,原始编译后的bin更本就没出现过这些字符,我想知道他是怎么知道的
还有那个乘法常量,一般人看到都会用 CEBEA6DA, 他居然用源码一样的常量,
别告诉我你对编译器的优化了如指掌
2014-10-8 12:14
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
7
cqccqc能否将分析思路、过程作个简单说明,以正视听呢?
2014-10-8 12:59
0
雪    币: 3716
活跃值: (4277)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
8
关注此贴,膜拜大牛,看结果
2014-10-8 13:25
0
雪    币: 21
活跃值: (514)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
9
我Hook了VM_Dispatcher的retn const
0040BA98    66:55           push    bp
0040BA9A    FF7424 01       push    dword ptr [esp+0x1]
0040BA9E    53              push    ebx
0040BA9F    FF7424 0E       push    dword ptr [esp+0xE]              ; 在这Hook可以通过edx判断handler
0040BAA3    C2 1200         retn    0x12                             ; JmpHandler



记录了 虚拟机的流程和数据
(吐槽:计算长度为8的字符串,执行了28w行VM伪指令)
0042F98C   vAdd4               ;60EE5178+9F552259=004373D1
0042F98B   vPopReg4            ;vReg_BC=00000217
0042F989   vPushReg4           ;vReg_38=00000000
0042F987   vAdd4               ;00000000+004373D1=004373D1
0042F986   vPopReg4            ;vReg_8=00000206
0042F984   vReadMemDs4         ;[004373D1]=D21F95B2
0042F983   vAdd4               ;D21F95B2+FC9F1128=CEBEA6DA
0042F982   vPopReg4            ;vReg_18=00000283
0042F980   vPushReg4           ;vReg_F4=FFFFFFA6
0042F97E   vImul4              ;(FFFFFFA6*CEBEA6DA)=(CEBEA691 50F9575C
0042F97D   vPopReg4            ;vReg_B4=00000A07
0042F97B   vPopReg4            ;vReg_78=00000011

然后接下来就是人工分析数据了
2014-10-8 13:27
0
雪    币: 645
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个人牛X,和源码差不多。
2014-10-8 13:28
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=cqccqc;1322152]我Hook了VM_Dispatcher的retn const

0040BA98    66:55           push    bp
0040BA9A    FF7424 01       push    dword ptr [esp+0x1]
0040BA9E    53    ...[/QUOTE]

这些无关痛痒,关键是那2个字符串是怎么来的

而且那个2个字符的计算更本不在输入的字符串循环里面
2014-10-8 13:31
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
12
牛X,赞一个。
Log了那么多数据,明文应该可以找到!
2014-10-8 13:48
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
你认为会出现明文吗!!!!
2014-10-8 14:01
0
雪    币: 21
活跃值: (514)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
14
字符串明文倒是没有
这是一开始分析的结果

key6=~(key6^szKey[i]^('A'+i));//'A'=0x41
当I=0;
   key6=~(key6^0x15^(0x41+0));

   key6=~(key6^0x54);//'T'=0x54
当I=1;
   key6=~(key6^0x30^(0x41+1));

   key6=~(key6^0x72);//'r'=0x72
上传的附件:
2014-10-8 14:11
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
[QUOTE=cqccqc;1322172]字符串明文倒是没有
这是一开始分析的结果
92764
key6=~(key6^szKey[i]^('A'+i));//'A'=0x41
当I=0;
   key6=~(key6^0x15^(0x41+0));

   key6=~(key6^0x54);//'T'=0x54
当I=...[/QUOTE]

我只能HEHE了
2014-10-8 14:14
0
雪    币: 101
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
群里的来顶一下,尼玛你趴了一个国庆不来开黑,说好的拿肾呢。
2014-10-8 15:29
0
雪    币: 206
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
群里的来顶一下,尼玛你趴了一个国庆不来开黑,说好的拿肾呢。
2014-10-8 15:34
0
雪    币: 101
活跃值: (43)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
复制粘贴可耻 你个土豪肾6看都不看一眼的
2014-10-8 15:36
0
雪    币: 11
活跃值: (24)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
群里的来顶一下,尼玛你趴了一个国庆不来开黑,说好的拿肾呢。
2014-10-8 15:37
0
雪    币: 206
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不要醉啊 女人 我穷得要死要死的
2014-10-8 16:02
0
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
21
呵呵,我当然不指望在VM的流程里会“出现”完整的明文,我说的是“找”!

事实上,在察觉那些个参与运算的值(即hawking源码ReverseMe.cpp里的xorkey[]和subkey[]数组)是无规律地变化时,曾打算去“找”的。
这时注意到,VM的栈(EBP指针)靠近栈底的部分,数组值已经全部“出现”了。
以xorkey[]数组为例,源码里只是一个简单的异或:
[FONT="Courier"]char   T  r  e  a  d  S  t  o  n  e
ASCII  54 72 65 61 64 53 74 6F 6E 65
^      41 42 43 44 45 46 47 48 49 4A
=      15 30 26 25 21 15 33 27 27 2F[/FONT]

即第四行的内容是大家都可以“看到”的。我就偷懒不再往回“找”了:确定是来自PCODE里硬编码的立即数还是某些运算的结果,只需验证一下拿来用就好。
这样做的弊病是只知道表面,不能还原真实算法;好处是能够较快得到答案。

cqccqc比我们前进了一步,认真地去“找”了!
这并不容易,因为PCODE里的垃圾指令比Handlers里的“花”多了不只一两个数量级,加上VM指令的低效,Log量会非常大,还要从中找出关键数据进行分析才能得出结论!

顺便请教一下hawking版主:TreadStone是否支持多线程?恕我愚钝,看得也不仔细。
2014-10-9 11:05
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
22
28w行VM伪指令

如何人工分析?
2014-10-9 15:34
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
23
[QUOTE=MistHill;1322367]呵呵,我当然不指望在VM的流程里会“出现”完整的明文,我说的是“找”!

事实上,在察觉那些个参与运算的值(即hawking源码ReverseMe.cpp里的xorkey[]和subkey[]数组)是无规律地变化时,曾打算去“找”的。
这时注意到,VM的栈(EBP指针)靠近栈底的部分,数组值已...[/QUOTE]

TreadStone是支持多线程的
2014-10-9 18:45
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我来zkanxa

我来看学习一下
2014-10-9 18:47
0
雪    币: 388
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
膜拜牛X,学习了~
2014-10-14 09:04
0
游客
登录 | 注册 方可回帖
返回
//