上级部门下发了一个考试系统,变态的是数据库中的题干和难度等级被加密了,同时还有一个签名字段,载入考题的时候,对这两个加密的字段的数据进行验证,通过验证后进行解密(我自己分析的),
难度等级中密文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?
不知道有没有哪位有兴趣看一下,给我指点一下,整个的解密流程,或者说是解密算法是什么?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!