首页
社区
课程
招聘
[求助]如何分析这段汇编代码的算法
发表于: 2009-1-6 23:02 4505

[求助]如何分析这段汇编代码的算法

2009-1-6 23:02
4505
上级部门下发了一个考试系统,变态的是数据库中的题干和难度等级被加密了,同时还有一个签名字段,载入考题的时候,对这两个加密的字段的数据进行验证,通过验证后进行解密(我自己分析的),
难度等级中密文ABBXBUDOEGGH的明文是0.1
调用验证和解密的代码段如下:
0050795E   . E8 1DD2F9FF    CALL Server.004A4B80
00507963   . 5A             POP EDX
00507964   . 8B08           MOV ECX,DWORD PTR DS:[EAX]
00507966   . FF91 B0000000  CALL NEAR DWORD PTR DS:[ECX+B0]
[COLOR="Red"]0050796C[/COLOR]   . BA 1C8C5000    MOV EDX,Server.00508C1C                  ;  questioncontent
00507971   . 8BC3           MOV EAX,EBX
00507973   . E8 08D2F9FF    CALL Server.004A4B80
00507978   . 8D55 A8        LEA EDX,DWORD PTR SS:[EBP-58]
0050797B   . 8B08           MOV ECX,DWORD PTR DS:[EAX]
0050797D   . FF51 60        CALL NEAR DWORD PTR DS:[ECX+60]
00507980   . 8B45 A8        MOV EAX,DWORD PTR SS:[EBP-58]
00507983   . 8D55 AC        LEA EDX,DWORD PTR SS:[EBP-54]
00507986   . E8 F912F0FF    CALL Server.00408C84
0050798B   . 8B55 AC        MOV EDX,DWORD PTR SS:[EBP-54]
0050798E   . 8D45 B0        LEA EAX,DWORD PTR SS:[EBP-50]
00507991   . E8 A6D2EFFF    CALL Server.00404C3C
00507996   . 8B45 B0        MOV EAX,DWORD PTR SS:[EBP-50]
00507999   . 8D55 B4        LEA EDX,DWORD PTR SS:[EBP-4C]
0050799C   . E8 2FF3FCFF    CALL Server.004D6CD0
005079A1   . 8B55 B4        MOV EDX,DWORD PTR SS:[EBP-4C]
005079A4   . 8D45 B8        LEA EAX,DWORD PTR SS:[EBP-48]
005079A7   . E8 80CCEFFF    CALL Server.0040462C
005079AC   . 8B45 B8        MOV EAX,DWORD PTR SS:[EBP-48]
005079AF   . 50             PUSH EAX
005079B0   . 8B06           MOV EAX,DWORD PTR DS:[ESI]
005079B2   . BA 1C8C5000    MOV EDX,Server.00508C1C                  ;  questioncontent


由此可以看出,004D6CD0是进行验证和解密的,(只有两个加密字段调用了此函数)

004D6CD0的汇编代码是我用dede出来的,如下
 搞定了


有些关键的代码读不懂,也推测不出来,推推就出错了,不知道是怎么搞的,还有就是004D6CD0中前面定义的那四局部变量的值个0101,2E2E,6E6E,6D6D,是做什么用的,定义的时候是string,然后转换成int,为什么不直接定义成int?
不知道有没有哪位有兴趣看一下,给我指点一下,整个的解密流程,或者说是解密算法是什么?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分析出来了,原来很简单
2009-1-6 23:10
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
郁闷,怎么没人指点一下呢?
2009-1-7 18:18
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
4
一只铅笔,一本草稿纸。一个计算器......
软件丢到OD中走到这个函数里面...一个一个命令的分析...
我经常这么干的...
2009-1-7 18:29
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢了,你的话犹如醍醐灌顶啊,呵呵,基本上搞定了,凭我这汇编水平,搞静态分析,累死也搞不清这算法,,呵呵,以前我看别人的破文当时就想,他怎么就知道那些东西呢,真正跟踪之后才发现,才明白,因为是内部软件,破文我就不发了,就是在我修改的红字处下段,然后F8单过,到004D6CD0单入,然后一直F8,边看右侧的寄存器边分析边记录,这样就可以分析出解密算法了
2009-1-8 12:13
0
雪    币: 475
活跃值: (1130)
能力值: ( LV9,RANK:1410 )
在线值:
发帖
回帖
粉丝
6
哈哈,你动态分析出来了?不错啊。呵呵。
2009-1-8 16:40
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好像不是很困难,但是后面有点小问题,现在正在弄,
怎么计算我是知道了:加密字符串长度/4,是明文的长度,也就是说每四个密文的字符串表示一个明文字符,依次取4个进行运算,运算结果放在一个明文长度的数组里面,对每组字符串(4个字母)的运算是:[(第一个字母的ASCII-41)*1A+(第二个字母的ASCII-41)]左移8位后的值+(第三个字母的ASCII-41)*1A+(第四个字母的ASCII-41),得到的这个值x放到数组中,接下来就是用0101,2E2E,6D6D和6E6E进行解密了
2009-1-8 22:03
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
全部搞定了,我爱上OD了,呵呵以前懒,从来很少尝试去逆向,因为网上基本上什么都有,呵呵
2009-1-9 17:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
郁闷,看不懂
2009-1-10 01:53
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
0 -  教下我``我还是弄不出
2009-1-10 01:54
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你没有程序当然没法跟踪了,呵呵
2009-1-13 00:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
强人,,  努力中...
2009-1-13 13:07
0
游客
登录 | 注册 方可回帖
返回
//