首页
社区
课程
招聘
有一软件不知如何下手(解决)另附上herbs2.exe的算法
发表于: 2006-1-6 19:54 6493

有一软件不知如何下手(解决)另附上herbs2.exe的算法

2006-1-6 19:54
6493
本人有一软件:中草药查询大全。UPX壳,轻松去掉,但运行时有自校验。Borland Delphi 3.0,用DEDE看,没有什么有用的东西,注册相关的代码没有。如何才能找到?软件下载:http://www.lxsoft.net/

见第8楼

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
2
用PEID查显示:UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo [Overlay]
这个软件应该是 [Overlay] 的问题,建议你看一下 看雪论坛精华六 -> 脱壳技术 -> 技巧会集 -> 附加数据 -> 浅谈脱壳中的附加数据问题(overlay)

粘贴完数据后,简单跟了一下

用bp SetFilePointer 设置断点

0012F5DC   004071D2  /CALL 到 SetFilePointer 来自 ffffffff.004071CD
0012F5E0   00000094  |hFile = 00000094 (window)
0012F5E4   00025A00  |OffsetLo = 25A00 (154112.)
0012F5E8   00000000  |pOffsetHi = NULL
0012F5EC   00000000  \Origin = FILE_BEGIN
0012F5F0   0044B345  返回到 ffffffff.0044B345 来自 ffffffff.004071C8
看这段的堆栈友好提示0012F5EC   00000000  \Origin = FILE_BEGIN 这里使用的是FILE_BEGIN指针ALT+F9返回

来到这里
004071C8    51              PUSH ECX
004071C9    6A 00           PUSH 0
004071CB    52              PUSH EDX
004071CC    50              PUSH EAX
004071CD    E8 12E8FFFF     CALL <JMP.&kernel32.SetFilePointer>
004071D2    C3              RETN
这句004071CB    52              PUSH EDX 中的EDX就是关键,F8继续,看看是谁给EDX传的值

0044B339   .  33C9          XOR ECX,ECX
0044B33B   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
0044B33E   .  8BC6          MOV EAX,ESI
0044B340   .  E8 83BEFBFF   CALL ffffffff.004071C8
0044B345   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
看这句0044B33B   .  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]这里是[EBP-C]把值传给了EDX,此时堆栈EBP的值是0012FE48

这里我就有点看不明白了,顺便问问高手这里应该怎么下硬件断点来找最上面SetFilePointer里所指的那个25A00呢?我对[ebp-c]也就是12FE3C下了hw 12FE3C断点,但是没找到是那传的这个25A00。高手指点一下吧。
2006-1-7 02:58
0
雪    币: 1172
活跃值: (1594)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
VFP程序啦,,2K系统,程序运行时会解压到“C:\WINNT\Downloaded Program Files\?’怜?\??\y703907.EXE”
PROCEDURE Click
  SOUNDFUN('ding.wav')
 IF THISFORM.TEXT2.VALUE = 0
     MESSAGEBOX('请输入注册码!','提示')
     THISFORM.TEXT2.SETFOCUS
    RETURN 
 ENDIF 
 LOCAL REGFILE
 REGFILE = GETENV('SystemRoot') + '\herbs3.lx'
 IF THISFORM.TEXT2.VALUE = INT((VAL(JQM2) + 20051110) / 2008)
    ZCM = INT((VAL(JQM2) + 20051110) / 2008)
     SAVE to ®file ALL LIKE zcm
    REG_NO = .T.
     MESSAGEBOX('注册成功!','提示')
     THISFORM.RELEASE
 ELSE 
     MESSAGEBOX('注册码不对,注册不成功!','提示')
    THISFORM.TEXT2.VALUE = 0
     THISFORM.TEXT2.SETFOCUS
 ENDIF 
ENDPROC
2006-1-7 05:24
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
4
1.0版本

PEID:Microsoft Visual C++ 5.0 [Overlay]

W32dasm载入分析后发现:
* Possible Reference to String Resource ID=00003: "Microsoft Visual FoxPro"

用UnFoxAll分析后有一个zhuce.sct的,打开就是算法。

8.0版本试了下,没能搞定。
带壳竟然能够脱离od调试器。
2006-1-7 09:17
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
最初由 龙岱客 发布
VFP程序啦,,2K系统,程序运行时会解压到“C:\WINNT\Downloaded Program Files\?’怜?\??\y703907.EXE”


当初跟出这文件,不知道是有何用,原来如此。谢谢。
2006-1-7 12:51
0
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
6
破解应该不男。讨论一下脱壳后修复[Overlay]的问题吧。
2006-1-7 13:15
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
最初由 RegKiller 发布
破解应该不男。讨论一下脱壳后修复[Overlay]的问题吧。


有空时再看如何修复。现在先暴了好用用再说。
2006-1-7 14:02
0
雪    币: 221
活跃值: (137)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
herbs2.exe算法
0045A31E     8D4D>lea ecx,dword ptr ss:[ebp-20]
0045A321     FFD3 call ebx                                    ; 取出机器码
0045A323     8B0D>mov ecx,dword ptr ds:[463024]
0045A329     51   push ecx
0045A32A     FF15>call dword ptr ds:[<&MSVBVM60.#581>]        ; MSVBVM60.rtcR8ValFromBstr
0045A330     8B16 mov edx,dword ptr ds:[esi]
0045A332     56   push esi
0045A333     DD9D>fstp qword ptr ss:[ebp-A8]
0045A339     FF92>call dword ptr ds:[edx+304]
0045A33F     50   push eax
0045A340     8D45>lea eax,dword ptr ss:[ebp-20]
0045A343     50   push eax
0045A344     FF15>call dword ptr ds:[<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0045A34A     8BF8 mov edi,eax
0045A34C     8D55>lea edx,dword ptr ss:[ebp-18]
0045A34F     52   push edx
0045A350     57   push edi
0045A351     8B0F mov ecx,dword ptr ds:[edi]
0045A353     FF91>call dword ptr ds:[ecx+A0]
0045A359     85C0 test eax,eax
0045A35B     DBE2 fclex
0045A35D     7D 1>jge short herbs2.0045A371
0045A35F     68 A>push 0A0
0045A364     68 8>push herbs2.00404D88
0045A369     57   push edi
0045A36A     50   push eax
0045A36B     FF15>call dword ptr ds:[<&MSVBVM60.__vbaHresultC>; MSVBVM60.__vbaHresultCheckObj
0045A371     8B45>mov eax,dword ptr ss:[ebp-18]
0045A374     50   push eax
0045A375     FF15>call dword ptr ds:[<&MSVBVM60.#581>]        ; MSVBVM60.rtcR8ValFromBstr
0045A37B     FF15>call dword ptr ds:[<&MSVBVM60.__vbaFPInt>]  ; MSVBVM60.__vbaFPInt
0045A381     FF15>call dword ptr ds:[<&MSVBVM60.__vbaFpR8>]   ; MSVBVM60.__vbaFpR8
0045A387     DD9D>fstp qword ptr ss:[ebp-C8]
0045A38D     DD85>fld qword ptr ss:[ebp-A8]
0045A393     DC05>fadd qword ptr ds:[4011A0]          加20051115
0045A399     833D>cmp dword ptr ds:[463000],0
0045A3A0     75 0>jnz short herbs2.0045A3AA
0045A3A2     DC35>fdiv qword ptr ds:[401198]          除2000
0045A3A8     EB 1>jmp short herbs2.0045A3BB
0045A3AA     FF35>push dword ptr ds:[40119C]
0045A3B0     FF35>push dword ptr ds:[401198]
0045A3B6     E8 E>call <jmp.&MSVBVM60._adj_fdiv_m64>
0045A3BB     DFE0 fstsw ax                            浮点数字给al
0045A3BD     A8 0>test al,0D                          是否是12位
0045A3BF     0F85>jnz herbs2.0045A670
0045A3C5     FF15>call dword ptr ds:[<&MSVBVM60.__vbaFPInt>]  ; MSVBVM60.__vbaFPInt  
0045A3CB     DC05>fadd qword ptr ds:[4011A0]           加20051115
0045A3D1     DFE0 fstsw ax                             浮点数字给al
0045A3D3     A8 0>test al,0D                           是否是12位
0045A3D5     0F85>jnz herbs2.0045A670
0045A3DB     FF15>call dword ptr ds:[<&MSVBVM60.__vbaFpR8>]   ; MSVBVM60.__vbaFpR8
0045A3E1     DC9D>fcomp qword ptr ss:[ebp-C8]        与假码比较
0045A3E7     DFE0 fstsw ax
0045A3E9     F6C4>test ah,40
0045A3EC     74 0>je short herbs2.0045A3F5
0045A3EE     B8 0>mov eax,1
0045A3F3     EB 0>jmp short herbs2.0045A3F7
0045A3F5     33C0 xor eax,eax

机器码:3232323232328678
注册码:1616181677304

zcm=Int((Val(JQM)+20051115)/2000+20051115)
herbs2.exe
DRIVER={Microsoft Access Driver (*.mdb)};
UID=Admin;PWD=lxsoftyxt20051115;
DBQ=\drug.dbf

输入假码后下万能断点,断下,ctrl+F9,返回后,往上看看  45A40C  NOP 则注册成功。另还得去启动检验。
2006-1-8 14:48
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
9
最初由 龙岱客 发布
VFP程序啦,,2K系统,程序运行时会解压到“C:\WINNT\Downloaded Program Files\?’怜?\??\y703907.EXE”
[CODE]
PROCEDURE Click
SOUNDFUN('ding.wav')
IF THISFORM.TEXT2.VALUE = 0
........


您好,我发现用foxtools反编译后用txt打开的却是一堆乱码:
     ??   f  f                        P@   %                             ?  U  ? ?C? ding.wav  ? %? ? ? ? ?^ ? ?C? 请输入注册码!? 提示犋?
? ? ? ? B? ? ? ? T? ?? SystemRoot5? \herbs3.lx?( %? ? ? CC? g??1?? 8?)? T? ?C? g??1?? 8?! SAVE to ®file ALL LIKE zcm
T? ?? ?C? 注册成功!? 提示犋?
? ? ? ?|? ?C? 注册码不对,注册不成功!? 提示犋? T? ? ? ? ?
? ? ? ? ? U
 SOUNDFUN THISFORM TEXT2 VALUE SETFOCUS REGFILE JQM2 ZCM REG_NO RELEASE Click,     ?1 Qq A A q q?? ?  ?1 A 1  )   f     

请问用什么打开才不会乱码?
谢谢。
2006-1-9 14:09
0
雪    币: 1172
活跃值: (1594)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
to:cyto

用PEid的Overlay插件提取y703907.EXE的overlay数据,再用“UnFoxAll 3.0专业增强版”反编译
2006-1-9 17:51
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
11
最初由 龙岱客 发布
to:cyto

用PEid的Overlay插件提取y703907.EXE的overlay数据,再用“UnFoxAll 3.0专业增强版”反编译


谢谢回复。
我试了下,还是不行。
unfoxall3.0的载入后什么东西都没有。
只好foxtools,还能反编译出来,不过就是上面所说的乱码。

另外,overlay的粘贴后,我用winhex查看,结尾不一样的。而且不能运行粘完overlay的程序。手工粘贴然后修改SetFilePointer指针倒是可以运行,反编译后还是乱码。

对提取到的y703907.exe直接进行反汇编也得到一样的效果,就是乱码。
2006-1-9 18:34
0
雪    币: 1172
活跃值: (1594)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
最初由 cyto 发布


谢谢回复。
我试了下,还是不行。
unfoxall3.0的载入后什么东西都没有。
........


用unfoxall3.0反编译导出的Overlay数据*.Ovl
2006-1-9 18:51
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
13
谢谢答复。
我实在太笨了,还是没能搞定。
你试着反编译y703907.exe看看是不是像我反编译的一样是乱码,如果不是的话那我的字体或者哪个地方出问题了。
2006-1-9 20:02
0
雪    币: 1172
活跃值: (1594)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 cyto 发布
谢谢答复。
我实在太笨了,还是没能搞定。
你试着反编译y703907.exe看看是不是像我反编译的一样是乱码,如果不是的话那我的字体或者哪个地方出问题了。


你有没用UnFoxAll反编译提取出来的Overlay数据?同样是乱码?如果是,那就没你办法了。

首先,我用FoxTools反编译y703907.exe,跟你一样得到的是乱码,而用UnFoxAll反编译不了y703907.exe,所以我选择提取Overlay数据,用FoxTools反编译提取的Overlay数据,一样得到的是乱码,用UnFoxAll反编译则可以(依然有乱码的内容,但在乱码后面UnFoxAll增加了处理过的代码,或者是FoxTools反编译不完全)。
提取的Overlay数据其实就是.app文件,可以用FoxTools反编译时在“其它-环境设置”勾选‘解密时生成.app文件以便进一步手动分析’得到,然后再用UnFoxAll反编译.app文件。
2006-1-9 22:08
0
雪    币: 417
活跃值: (475)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
15
感谢龙岱客的热心,谢谢您。
终于解决了乱码问题。
我是这样做的,先foxtools反编译,得到3个文件:
IDD_ABOUT.SCT;IDD_MAIN.SCT;IDD_START.SCT
然后用unfoxall 3.0再次对这三个文件反编译,各个打开发现注册算法躺在IDD_START.SCT这个文件中。

之前对y703907.exe不关心,精力放在对overlay的处理,overlay白粘了。
2006-1-10 08:52
0
游客
登录 | 注册 方可回帖
返回
//