【文章标题】: 公务员之路5.1题库解密
【文章作者】: 松松
【作者邮箱】: dongmenbianxue@163.com
【作者QQ号】: 4752017
【软件名称】: 公务员之路
【软件大小】: 没记
【下载地址】: 自己搜索下载
【加壳方式】: aspack
【编写语言】: delphi5
【使用工具】: OD
【操作平台】: win2K
【软件介绍】: 公务员考试专用训练软件全国通用版《公务员之路》
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
该程序的题库保存在sysdat\data0下。dat文件其实是mdb,所有题目,答案都是加过密的。现在我们的目标就是解开题库。
1。查壳。PEID查出是aspack,简单壳,用工具就可以脱。
2。该软件是用delphi5编写的,用DEDE反编。
3。经过跟踪,关键CALL是00557634。
00557634 /$ 55 PUSH EBP
00557635 |. 8BEC MOV EBP,ESP
00557637 |. 6A 00 PUSH 0
00557639 |. 53 PUSH EBX
0055763A |. 56 PUSH ESI
0055763B |. 57 PUSH EDI
0055763C |. 8BF1 MOV ESI,ECX
0055763E |. 8BFA MOV EDI,EDX
00557640 |. 8BD8 MOV EBX,EAX
00557642 |. 33C0 XOR EAX,EAX
00557644 |. 55 PUSH EBP
00557645 |. 68 F6765500 PUSH _公务员?005576F6
0055764A |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0055764D |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00557650 |. 8D4D FC LEA ECX,DWORD PTR SS:[EBP-4]
00557653 |. 8BD7 MOV EDX,EDI
00557655 |. 8BC3 MOV EAX,EBX
00557657 |. E8 00FFFFFF CALL _公务员?0055755C ***这个CALL 处理字符串。两个并成一个
0055765C |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0055765F |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00557662 |. E8 61C8EAFF CALL _公务员?00403EC8
00557667 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0055766A |. E8 85CAEAFF CALL _公务员?004040F4 ***取出长度
0055766F |. 8BF8 MOV EDI,EAX
00557671 |. 85FF TEST EDI,EDI
00557673 |. 7E 6B JLE SHORT _公务员?005576E0
00557675 |. BB 01000000 MOV EBX,1
0055767A |> 8B45 FC /MOV EAX,DWORD PTR SS:[EBP-4] ***这里开始解密
0055767D |. 8A4418 FF |MOV AL,BYTE PTR DS:[EAX+EBX-1]
00557681 |. 0FB7D6 |MOVZX EDX,SI ***SI初始值为$3039
00557684 |. C1EA 08 |SHR EDX,8
00557687 |. 32C2 |XOR AL,DL
00557689 |. 84C0 |TEST AL,AL
0055768B |. 75 1F |JNZ SHORT _公务员?005576AC
0055768D |. 8B45 08 |MOV EAX,DWORD PTR SS:[EBP+8]
00557690 |. E8 2FCCEAFF |CALL _公务员?004042C4
00557695 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
00557698 |. 8A541A FF |MOV DL,BYTE PTR DS:[EDX+EBX-1]
0055769C |. 885418 FF |MOV BYTE PTR DS:[EAX+EBX-1],DL
005576A0 |. 66:6BC6 0B |IMUL AX,SI,0B
005576A4 |. 66:83C0 0C |ADD AX,0C
005576A8 |. 8BF0 |MOV ESI,EAX
005576AA |. EB 30 |JMP SHORT _公务员?005576DC
005576AC |> 8B45 08 |MOV EAX,DWORD PTR SS:[EBP+8]
005576AF |. E8 10CCEAFF |CALL _公务员?004042C4
005576B4 |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
005576B7 |. 8A541A FF |MOV DL,BYTE PTR DS:[EDX+EBX-1]
005576BB |. 0FB7CE |MOVZX ECX,SI
005576BE |. C1E9 08 |SHR ECX,8
005576C1 |. 32D1 |XOR DL,CL
005576C3 |. 885418 FF |MOV BYTE PTR DS:[EAX+EBX-1],DL ***解出的放入内存
005576C7 |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
005576CA |. 0FB64418 FF |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]
005576CF |. 66:03F0 |ADD SI,AX
005576D2 |. 66:6BC6 0B |IMUL AX,SI,0B
005576D6 |. 66:83C0 0C |ADD AX,0C
005576DA |. 8BF0 |MOV ESI,EAX
005576DC |> 43 |INC EBX
005576DD |. 4F |DEC EDI
005576DE |.^ 75 9A \JNZ SHORT _公务员?0055767A
005576E0 |> 33C0 XOR EAX,EAX
005576E2 |. 5A POP EDX
005576E3 |. 59 POP ECX
005576E4 |. 59 POP ECX
005576E5 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
005576E8 |. 68 FD765500 PUSH _公务员?005576FD
005576ED |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
005576F0 |. E8 7FC7EAFF CALL _公务员?00403E74
005576F5 \. C3 RETN
005576F6 .^ E9 19C1EAFF JMP _公务员?00403814
005576FB .^ EB F0 JMP SHORT _公务员?005576ED
005576FD . 5F POP EDI
005576FE . 5E POP ESI
005576FF . 5B POP EBX
00557700 . 59 POP ECX
00557701 . 5D POP EBP
00557702 . C2 0400 RETN 4
解密算法很简单。下面给出delphi的代码,根据汇编直接写出,所以不太美观,效率也不是很好。但是可以正确解密。
function TForm1.decrypt(str: string): string;
var
i: integer;
j, tt, tt2: word;
tmp: string;
tmpword: array of word;
begin
tt2 := $3039;
setlength(tmpword, length(str) div 2);
for i := 0 to length(tmpword) - 1 do
begin
tmpword[i] := strtoint('$' + str[i * 2 + 1] + str[i * 2 + 2]);
end;
for i := 0 to length(tmpword) - 1 do
begin
tt := tt2;
tt := tt shr 8;
j := tmpword[i] xor tt;
if j > 0 then
begin
tmp := tmp + char(j);
tt := tt2 + tmpword[i];
j := tt * $0B;
j := j + $0C;
tt2 := j;
end
else
begin
j := tmpword[i];
tmp := tmp+char(j);
j := tt2 * $0B;
j := j + $0C;
tt2 := j;
end;
end;
result := tmp;
end;
有了算法,论坛里的某位老兄,可以写一个程序,直接把题库导出了。祝考试成功。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年06月02日 11:41:53
[课程]Linux pwn 探索篇!