本帖最后由 pk8900 于 2018-2-28 09:37 编辑
先附上软件:某档案管理软件 链接: 链接: https://pan.baidu.com/s/1mj6Zbtu 密码: 5nr4
【更新分享注册机及补丁】链接:链接:http://pan.baidu.com/s/1pLK1TJd 密码:xwb7
相关工具软件:setup.inx文件反编译(sexy installshielddecompiler)
下载地址:http://www.greenxf.com/soft/75759.html
最近有个单位上班的朋友想让我找一个档案管理软件,于是我在网上开始寻找,试了很多,都不太理想,后来下载了一个KY档案管理软件,于是想安装看看,打开安装包,安装需要序列号,百度一下,没找到,又不甘心,便开始研究了一下。软件安装包采用的是InstallShield Installshield 封装,以前不太研究安装程序,对于InstallShield Installshield也不是太熟悉,OD调试安装程序,发现安装程序运行后,会调用一个新线程Ikernel.exe程序执行安装脚本,于是上网查相关资料,无意中看到关于安装文件 setup.inx的介绍的一个贴子,有个工具软件可以反编译,于是下载了一个【setup.inx文件反编译(sexy installshield decompiler) 】(地址:http://www.greenxf.com/soft/75759.html),打开setup.inx,反编译:
菜单【view】-【message references】,查看消息引用:
找到注册码输入后的错误提示“序列号格式为XXXXX-XXXXX-XXXXX-XXXXX-XXXXX………”,双击找到代码位置:
[Delphi] 纯文本查看 复制代码 @00008347:0007 local_string4 = (global_string16 + "123456789012345678901234567890");
@00008372:0020 CalcSerialNo(local_string4); // dll: GetSerialNo.dll
@0000837B:0029 StrSub(global_string16, global_string16, 0, 29);
@0000838F:0029 StrSub(local_string4, local_string4, 0, 29);
@000083A3:000E local_number4 = (global_string16 != local_string4);
@000083B0:0004 if(local_number4) then // ref index: 2
@000083BC:0021 MessageBox("序列号格式为XXXXX-XXXXX-XXXXX-XXXXX-XXXXX,全部为大写字母或数字,\n\n请检查字母的大小写。", -65535);
@00008420:0006 local_number3 = 0;
@0000842C:000D local_number4 = (local_number2 = 3);
@0000843B:0004 if(local_number4) then // ref index: 1
@00008447:0002 abort;
@0000844B:0001 endif;
@0000844B:0001 label_844b:
大致分析一下代码:global_string16 ;安装界面输入的序列号DLL文件GetSerialNo.dll中有一个函数为:CalcSerialNo(字符串变量),此函数计算生成序列号,生成的序列号取前29位:即XXXXX-XXXXX-XXXXX-XXXXX-XXXXX格式,输入的序列号取前29位,进行对比,一样的话就能进行下一步,不一样的话MessageBox一个提示框。看到这里应该就有很多办法了,可以分析CalcSerialNo函数,得到序列号的生成算法,也可以写个程序调用CalcSerialNo函数,直接生成一个序列号:打开AU3(用着比较顺手,小程序用它方便快捷),写好代码:随便用“AAAAA-BBBBB-CCCCC-DDDDD-EEEEE”代入:[Actionscript3] 纯文本查看 复制代码 Dim $b
$a=DllOpen ( "GetSerialNo.dll" )
MsgBox (0,0,$a)
$b="AAAAA-BBBBB-CCCCC-DDDDD-EEEEE" & "123456789012345678901234567890"
Local $stString = DllStructCreate("char[260]")
DllStructSetData($stString, 1, $b)
$c=DllCall($a,"none","CalcSerialNo","ptr",DllStructGetPtr($stString)) ;调用DLL 函数
MsgBox (0,0,@error) ;调用是否成功
MsgBox (0,0,DllStructGetData($stString, 1)) ;返回结果
ClipPut(DllStructGetData($stString, 1)) ;将结果置入剪贴板 s【GetSerialNo.dll在安装软件运行时,系统临时目录里就有。】得到一个序列号:VQAAA-19YBB-ZMCCC-CZRDD-KBV6M,粘入安装程序,可以下一步继续安装了,哈哈,看来这个序列号不是太严格。软件安装完成后打开,有提示框,看来还在这等着呢。
OD载入:OEP:[Asm] 纯文本查看 复制代码 0040276C >/$ 68 94E44A00 push ArchiveM.004AE494
00402771 |. E8 EEFFFFFF call <jmp.&MSVBVM60.#ThunRTMain_100>
00402776 |. 0000 add byte ptr ds:[eax],al
00402778 |. 0000 add byte ptr ds:[eax],al
0040277A |. 0000 add byte ptr ds:[eax],al
0040277C |. 3000 xor byte ptr ds:[eax],al
0040277E |. 0000 add byte ptr ds:[eax],al
00402780 |. 3800 cmp byte ptr ds:[eax],al
VB编的程序,采用加密狗限制使用,试用次数应该是计入一个数据库文件,OD查找字符串,一目了然。
关键代码:
代码很清晰,改改条件,可以无限使用了,具体改法就不在这里写了,相信只要是论坛里呆上个把月,都不是问题,软件大概的试用了一翻,功能很多,操作不太人性化,这样的软件报价7K多,也不知道值不值这个价钱。说些题外话,接触逆向也有些年头了,无奈锁事太多,心无法静下来,到现在也还是一个菜鸟,最近一段时间打算下点功夫好好学习一下,毕竟不在年轻了,玩游戏的时代也过了,艺多不压身,会的东西多才能吃饱饭。写的不好,将就着看吧,等写的多了会好一点。
应网友回复要求,我制作了注册机和补丁分享给大家,百度云地址:链接:链接:http://pan.baidu.com/s/1pLK1TJd 密码:xwb7 |