首页
社区
课程
招聘
18次计算机等级考生上机盘(上海捷成)[原创]
发表于: 2005-7-8 14:21 4731

18次计算机等级考生上机盘(上海捷成)[原创]

2005-7-8 14:21
4731
18次计算机等级考生上机盘(上海捷成)

希望对考试的同志们有用,以前的东西,比较乱,见谅。
by zzhzihui@tom.com
★目的:解除过期
程序可能检测当前日期,是否过了考试日期:
0047C558   > \8B95 4CFFFFFF MOV EDX,DWORD PTR SS:[EBP-B4]
0047C55E   .  2395 48FFFFFF AND EDX,DWORD PTR SS:[EBP-B8]
0047C564   .  85D2          TEST EDX,EDX
0047C566   .  0F85 87000000 JNZ KSXT.0047C5F3        ;日期检查jmp ok
0047C56C   .  C745 FC 05000>MOV DWORD PTR SS:[EBP-4],5
0047C573   .  C745 AC 04000>MOV DWORD PTR SS:[EBP-54],80020004

到了2005年,发现还有个地方检测:
0047CF74   .  FF15 0C134000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>;  MSVBVM60.__vbaFreeStrList
0047CF7A   .  83C4 3C       ADD ESP,3C
0047CF7D   .  0FBF85 88FEFF>MOVSX EAX,WORD PTR SS:[EBP-178]
0047CF84   .  85C0          TEST EAX,EAX
0047CF86   .  0F84 BF000000 JE KSXT.0047D04B    ;日期检查jmp ok
0047CF8C   .  C745 FC 1B000>MOV DWORD PTR SS:[EBP-4],1B
0047CF93   .  C785 38FFFFFF>MOV DWORD PTR SS:[EBP-C8],80020004
0047CF9D   .  C785 30FFFFFF>MOV DWORD PTR SS:[EBP-D0],0A
0047CFA7   .  C785 48FFFFFF>MOV DWORD PTR SS:[EBP-B8],80020004
0047CFB1   .  C785 40FFFFFF>MOV DWORD PTR SS:[EBP-C0],0A
0047CFBB   .  C785 B8FEFFFF>MOV DWORD PTR SS:[EBP-148],KSXT.005A5108
----
0047D1B0   .  DFE0          FSTSW AX
0047D1B2   .  F6C4 01       TEST AH,1
0047D1B5   .  74 0C         JE SHORT KSXT.0047D1C3 ;nop
0047D1B7   .  C785 5CFEFFFF>MOV DWORD PTR SS:[EBP-1A4],1
0047D1C1   .  EB 0A         JMP SHORT KSXT.0047D1CD
0047D1C3   >  C785 5CFEFFFF>MOV DWORD PTR SS:[EBP-1A4],0

★目的:得到考生考试成绩

考生交卷后会在考生目录下的HLPWIN目录里的DjksSTD.MDB数据库中写入成绩:
例如:考生考号为130199990001,则数据库为C:\WEAXM\26010001\HLPWIN\DJKSSTD.MDB
这个数据库中DJKS31和DJKS32表中存有考生信息,其中CJ列是考生的加密成绩.
该数据库密码为123
例如:这是1分加密后的数据
1BD9B7D85F4E5F5788692BEBC129262E05093B5E679940FE38C41DCADE021008895B64AB93DD44245B9428CCEF05F765D1E0B855F28C446ECF010C050EF1CF8C360A2C97C3B100DE660E5EF321C5FA10E295589B2305E8C25553C2FB5D27488CBE53C9BE3679A05D65DCA~@~$~&~^

KXST.EXE 考生系统主文件,VB编写

OD跟踪:
由于该程序把交卷窗体frmclose设为无最大化按钮,无最小化按钮,无控制菜单,对话框样式,
不可缩放,而且程序运行时会设定为最大化窗口,所以在用OD跟踪时,虽然断下,但是无法
看到OD窗口,因为断下后程序暂停,但frmclose窗口还是处于topmost状态,所以看不到od了.
看不到OD怎么跟踪,怎么办??

用VBEXPLORER来查看该文件,可以找到以下信息.
frmclose,评分窗体,把该窗体一些属性改为相应数据,例如:普通样式,可缩放
load(载入)代码入口:        473cc0
unload(卸载):                475d80
lostfocus(丢失焦点):        475c50

timer(时间控件):        475e00 待会儿就知道这个该死的东东了.

既然是最顶部窗口,它肯定调用了SetWindowPos这个API:
SetWindowPos
VB声明
Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
说明
这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态

其中hWndInsertAfter这个参数就是来设置topmost的,当它为-1时,设置TOPMOST,
如果为1,则设为buttom(最底部窗口)
好,我们在od里下:
BP 473cc0 (frmclose载入的入口)
然后F9运行.断下,在下:
BP SetWindowPos
F9运行,断下.按CTRL+F9运行到返回,返回到主程序会发现在这里:

load段settopmost:
004740DB    FF15 B4104000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>; MSVBVM60.__vbaHresultCheckObj
004740E1    8B95 94FEFFFF   MOV EDX,DWORD PTR SS:[EBP-16C]
004740E7    6A 03           PUSH 3  ; frmload_set topmost这里设置窗口为顶部窗口
004740E9    57              PUSH EDI
004740EA    57              PUSH EDI
004740EB    57              PUSH EDI
004740EC    57              PUSH EDI
004740ED    6A FF           PUSH -1        ;这个参数,改为1设最底部窗体,机器码6A01               
004740EF    52              PUSH EDX
004740F0    E8 3F66FAFF     CALL KSXT.0041A734        ;这里调用setwindowpos API
004740F5    FF15 B0104000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaSetSy>; MSVBVM60.__vbaSetSystemError
004740FB    8B03            MOV EAX,DWORD PTR DS:[EBX]

但是这样还不行,因为该死的TIMER段还有代码会设置该窗体,让窗体取得焦点.
timer 段:
00476F17    8BF8            MOV EDI,EAX
00476F19    57              PUSH EDI        ;jmp 476f3a
00476F1A    8B0F            MOV ECX,DWORD PTR DS:[EDI]
00476F1C    FF91 04020000   CALL DWORD PTR DS:[ECX+204];got focus获得焦点
00476F22    3BC6            CMP EAX,ESI
00476F24    DBE2            FCLEX
00476F26    7D 12           JGE SHORT KSXT.00476F3A

跟踪发现执行完476F1C处CALL后,堆栈段减2,那么就要尝试跳过离它最近的一个PUSH,
就是00476F19 PUSH EDI        ;改为jmp 476f3a

将上面两处004740ED,00476F19用HIEW修改.
好了,这样程序评分窗口可以调整大小,也可以看OD,timer也不打扰了.

但统计成绩的代码在那里呢?如果从load开始单步跟太麻烦了,既然访问CJ这个字段,
那么搜索CJ,还好,我有OD的插件Ultra String Reference plugin(罗聪 所写)
搜索一下,注意是UNICODE,找到了三四个,都下断点.
再点"交卷"然后程序会执行到这个CJ,在5944b4断下:
005944AB    8B45 A8         MOV EAX,DWORD PTR SS:[EBP-58]
005944AE    8985 5CFDFFFF   MOV DWORD PTR SS:[EBP-2A4],EAX
005944B4    C785 38FEFFFF 0>MOV DWORD PTR SS:[EBP-1C8],KSXT.0041BD08 ; UNICODE "CJ"
005944BE    C785 30FEFFFF 0>MOV DWORD PTR SS:[EBP-1D0],8
005944C8    8D4D A4         LEA ECX,DWORD PTR SS:[EBP-5C]
005944CB    51              PUSH ECX

可是很不幸,这里已经是加密的代码了(好像是MD加密,鬼才知道)
那好,向前,找到评分程序段入口:
00592E80   $  55            PUSH EBP        ;这里被call
00592E81   .  8BEC          MOV EBP,ESP
00592E83   .  83EC 18       SUB ESP,18
00592E86   .  68 46D94000   PUSH <JMP.&MSVBVM60.__vbaExceptHandler>  ;  SE handler installation
00592E8B   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00592E91   .  50            PUSH EAX
00592E92   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
00592E99   .  B8 F4030000   MOV EAX,3F4
00592E9E   .  E8 9DAAE7FF   CALL <JMP.&MSVBVM60.__vbaChkstk>
............

重新考试,取消所有断点,下断点bp 592e80,运行,断下,F8单步跟:
...可以发现程序把,各个模块的成绩连接起来.
....
0059454B   > \8B4D A4       MOV ECX,DWORD PTR SS:[EBP-5C]
0059454E   .  898D 54FDFFFF MOV DWORD PTR SS:[EBP-2AC],ECX
00594554      8B55 C4       MOV EDX,DWORD PTR SS:[EBP-2C] ;ebp-2c是加密数据,ebp-3c是未加密数据
00594557   .  8995 28FEFFFF MOV DWORD PTR SS:[EBP-1D8],EDX
0059455D   .  C785 20FEFFFF>MOV DWORD PTR SS:[EBP-1E0],8
00594567   .  B8 10000000   MOV EAX,10

堆栈数据:
0012ED00   001825B4  UNICODE "012.004.002.000.000.006.000.000.000.000.0" ;原始成绩
0012ED04   00000000
0012ED08   00000000
0012ED0C   001770AC  UNICODE "14B5BFB387C389CCF6BFCC1B34698C05619BF4DF29092AE2476D9E9DC0F844FE54908422387C61C30D75A158F69857F43ED6"
0012ED10   001AD2BC  UNICODE "1975EB3FA088E7024A367C95D879CAECE5C7DC85FE8482AC51792ABD5AAA45F66D114B15BECEDDA409942D6D9E02051B942C" ;存入的成绩加密数据

好了,把00594554处的EBP-2C改为EBP-3C就可以把未加密的成绩存入数据库.
成绩数据"012.004.002.000.000.006.000.000.000.000.0"格式:
最左侧为总成绩,后面是各项考试试题的成绩
-------------
看看到底是怎么加密的,又跟:
004A48C0   $  55            PUSH EBP
004A48C1   .  8BEC          MOV EBP,ESP
004A48C3   .  83EC 0C       SUB ESP,0C
004A48C6   .  68 46D94000   PUSH <JMP.&MSVBVM60.__vbaExceptHandler>  ;  SE handler installation
004A48CB   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004A48D1   .  50            PUSH EAX
004A48D2   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
004A48D9   .  83EC 7C       SUB ESP,7C
004A48DC   .  53            PUSH EBX
004A48DD   .  56            PUSH ESI
004A48DE   .  57            PUSH EDI
004A48DF   .  8965 F4       MOV DWORD PTR SS:[EBP-C],ESP
004A48E2   .  C745 F8 48374>MOV DWORD PTR SS:[EBP-8],KSXT.00403748
004A48E9   .  68 5C0F4200   PUSH KSXT.00420F5C                       ;  UNICODE "EnCode" ,看到了,编码程序段
004A48EE   .  33FF          XOR EDI,EDI
004A48F0   .  68 18505A00   PUSH KSXT.005A5018                       ;  UNICODE "BreakFile           "
004A48F5   .  6A 14         PUSH 14
004A48F7   .  897D E8       MOV DWORD PTR SS:[EBP-18],EDI
004A48FA   .  897D E0       MOV DWORD PTR SS:[EBP-20],EDI
004A48FD   .  897D DC       MOV DWORD PTR SS:[EBP-24],EDI
004A4900   .  897D CC       MOV DWORD PTR SS:[EBP-34],EDI
004A4903   .  897D BC       MOV DWORD PTR SS:[EBP-44],EDI
004A4906   .  897D AC       MOV DWORD PTR SS:[EBP-54],EDI
004A4909   .  897D 9C       MOV DWORD PTR SS:[EBP-64],EDI
.....
经过查看,发现它还有个DECODE代码,也许是用来解密的,但是实在是太麻烦了.
以后有时间再看吧.
==================
安装过程:
在虚拟PC(win98)安装,用REGSNAP检测:
New files
cmctlchs.dll        **
cmdlgchs.dll        **
comctl32.ocx
comdlg32.ocx
excel8.olb        **
expsrv.dll
flxgdchs.dll
msexcl35.dll        **
msflxgrd.ocx
msjint35.dll
msjter35.dll
msppt8.olb
msvbvm60.dll
msword8.olb        **
msxbse35.dll
threed32.ocx
vb5db.dll
vb6chs.dll
vb6stkit.dll
vbajet32.dll
在NT下,这些文件要复制到SYSTEM32目录内
==========
0047C6D7    6A 27           PUSH 27
0047C6D9    8D85 50FFFFFF   LEA EAX,DWORD PTR SS:[EBP-B0]
0047C6DF    50              PUSH EAX                                ;其实这里检查c:\Setup181.wi_
0047C6E0    FF15 B4124000   CALL DWORD PTR DS:[<&MSVBVM60.#645>]     ; MSVBVM60.rtcDir
0047C6E6    8BD0            MOV EDX,EAX
0047C6E8    8D4D 94         LEA ECX,DWORD PTR SS:[EBP-6C]
0047C6EB    FF15 B0134000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrMo>; MSVBVM60.__vbaStrMove
0047C6F1    50              PUSH EAX
0047C6F2    6A 00           PUSH 0
0047C6F4    FF15 9C114000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp
0047C6FA    F7D8            NEG EAX
0047C6FC    1BC0            SBB EAX,EAX
0047C6FE    40              INC EAX
0047C6FF    F7D8            NEG EAX
0047C701    66:8985 88FEFFF>MOV WORD PTR SS:[EBP-178],AX
0047C708    8D4D 94         LEA ECX,DWORD PTR SS:[EBP-6C]
0047C70B    FF15 18144000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr
0047C711    8D8D 50FFFFFF   LEA ECX,DWORD PTR SS:[EBP-B0]
0047C717    FF15 28104000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVar
0047C71D    0FBF8D 88FEFFFF MOVSX ECX,WORD PTR SS:[EBP-178]
0047C724    85C9            TEST ECX,ECX
0047C726   /0F84 BF000000   JE KSXT.0047C7EB //这里跳走,不会提示
0047C72C   |C745 FC 0600000>MOV DWORD PTR SS:[EBP-4],6
0047C733   |C785 38FFFFFF 0>MOV DWORD PTR SS:[EBP-C8],80020004
0047C73D   |C785 30FFFFFF 0>MOV DWORD PTR SS:[EBP-D0],0A
0047C747   |C785 48FFFFFF 0>MOV DWORD PTR SS:[EBP-B8],80020004
----
0047C846    50              PUSH EAX
0047C847    66:8B45 D4      MOV AX,WORD PTR SS:[EBP-2C]
0047C84B    50              PUSH EAX
0047C84C    6A FF           PUSH -1
0047C84E    6A 01           PUSH 1                ;即使强制跳到这里,打开文件会异常,还是会提示日期被调回
0047C850    FF15 C4124000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaFileO>; MSVBVM60.__vbaFileOpen
0047C856    8D4D 94         LEA ECX,DWORD PTR SS:[EBP-6C]
0047C859    FF15 18144000   CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeS>; MSVBVM60.__vbaFreeStr

==========
综上所述,满足其必须的DLL和导入REG文件后,复制c:\Setup181.wi_就可以绕过运行
如果手动建立一个然后跟踪,会发现程序会用lineinput读入一行,再判断等等.这个文件估计是存放安装日期的.

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
呵呵.我也分析过,还写了查分程序和跳过轮次限制程序.
2005-7-8 14:35
0
游客
登录 | 注册 方可回帖
返回
//