首页
社区
课程
招聘
[原创]公务员之路5.1题库解密!
发表于: 2006-6-2 11:44 7198

[原创]公务员之路5.1题库解密!

2006-6-2 11:44
7198

【文章标题】: 公务员之路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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (7)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,谢谢!!!这里的人真好,真的!
2006-6-3 10:08
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不太懂,能不能把注释搞详细点,帮帮我们这些入门者.
2006-6-3 17:47
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请教一下,你是如何跟踪到delphi解密MDB数据库的关键点的?用什么断点或者是什么用什么其它方法?
2006-6-4 01:03
0
雪    币: 237
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
用PE查是ASPack 2.12 -> Alexey Solodovnikov,手动脱壳后程序不能运行

00562504     55            push ebp
00562505     8BEC          mov ebp,esp
00562507     83C4 F4       add esp,-0C
0056250A     53            push ebx
0056250B     56            push esi
0056250C     B8 7C205600   mov eax,公务员之.0056207C
00562511     E8 3655EAFF   call 公务员之.00407A4C
00562516     8B1D 1C575600 mov ebx,dword ptr ds:[56571C]           ; 公务员之.00566B00
0056251C     A1 A0585600   mov eax,dword ptr ds:[5658A0]
00562521     8B00          mov eax,dword ptr ds:[eax]
00562523     E8 F0EDEEFF   call 公务员之.00451318
00562528     68 40285600   push 公务员之.00562840
0056252D     6A 00         push 0
0056252F     6A 00         push 0
00562531     E8 BA55EAFF   call 公务员之.00407AF0                      ; jmp to kernel32.CreateMutexA
00562536     8BF0          mov esi,eax
00562538     E8 4356EAFF   call 公务员之.00407B80                      ; jmp to ntdll.RtlGetLastWin32Error
0056253D     3D B7000000   cmp eax,0B7
00562542     0F84 D2020000 je 公务员之.0056281A
00562548     8B0D A0585600 mov ecx,dword ptr ds:[5658A0]           ; 公务员之.005667D4
0056254E     8B09          mov ecx,dword ptr ds:[ecx]
00562550     B2 01         mov dl,1
00562552     A1 841E5600   mov eax,dword ptr ds:[561E84]
00562557     E8 887DEEFF   call 公务员之.0044A2E4
0056255C     8903          mov dword ptr ds:[ebx],eax
0056255E     8B03          mov eax,dword ptr ds:[ebx]
00562560     BA 50285600   mov edx,公务员之.00562850
00562565     E8 265FEDFF   call 公务员之.00438490

我是通过单步跟踪,脱壳在00562504处的,脱壳后不能运行,提示应用程序错误。(我的系统是XP2,在两能电脑上都是同样的现象)。也不知道脱壳点对不对,望各位高手指点这个软件怎样手动脱壳.另外这个2.12版本的ASP壳用什么软件可以脱掉?
谢谢!

2006-6-4 09:12
0
雪    币: 221
活跃值: (44)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
最初由 9494 发布
请教一下,你是如何跟踪到delphi解密MDB数据库的关键点的?用什么断点或者是什么用什么其它方法?


如何跟到关键CALL,是在DEDE里反编,然后找下一题的按钮过程下断点。按下一题按钮,题目刷新,极大可能从题库取出密文然后解密。

在经过
Call 00557634 前 有一个MOV 。是把密文传参。DELPHI的参数传递是优先寄存器。
过这个CALL后,在EBP-8 内可以看到明文。当然在OD里无法直接看,只能用数据跟随在数据窗口内看。
这样就可以基本确定这个CALL是关键。跟进去看一下。解密过程就是这个CALL。
2006-6-4 10:20
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢指导!我跟踪一下看看.
2006-6-5 00:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我手头有个DELPHI程序,不知如何下手,看看你的文章很受启发
2006-6-16 10:09
0
游客
登录 | 注册 方可回帖
返回
//