首页
社区
课程
招聘
[旧帖] [求助]一个年久失修的医疗软件的逆向疑问 0.00雪花
发表于: 2012-3-24 00:36 1351

[旧帖] [求助]一个年久失修的医疗软件的逆向疑问 0.00雪花

2012-3-24 00:36
1351
先说明下,我是初学逆向,几乎没有编程经验那种,言语不对望各位高手谅解。

失修的医疗软件地址:

http://115.com/file/c29y01d7

问题来源如下:

已有软件注册机,问题是注册机需要插入USB加密狗才能算注册码,怕哪天机器狗挂了,就算不了注册码了。而这软件已经很老了,机器狗坏掉后不知道在哪里还能买到这老旧的软件。所以想把软件破解掉,以免后患。

软件主程序为cimg.exe,包含了软件注册的所有代码,用delphi编写的。

运行后弹出提示框要求注册,绑定机器码的那种。如果点击取消或者输入了错误的注册码,会提示“非法用户”,然后自动关机,所以在逆向时需要用某些工具阻止自动关机。

第一个思路,查找注册成功跟失败的跳转地方。

由于对逆向了解不多,所以特意在论坛逛了一圈,知道大概用dede和od等软件破解。于是先用dede载入cimg.exe,通过一些窗体文字介绍,大概了解了注册按钮对应的代码。用od载入软件,转到注册按钮对应的代码,然后一步步运行调试,可惜啊,由于各方面经验不足,跳来跳去N久头晕了,没找到(或看不出)明显的注册成功或失败跳转的地方,连注册失败的窗口N久都没跳出来,直接运行倒是很快跳出来了。失败。

第二个思路,已知一组机器码(记为机器码A)和对应的注册码,尝试把未知的机器码固定为机器码A。

方向一,找到计算机器码的代码,对其进行修改,让计算结果为机器码A。
方向二,找到比较注册码的代码,修改让其读取出的机器码为机器码A。
从这两个方向出发,忙了半天,大概找到了一些读取机器码的地方,也看到了内存中的机器码,改了很多次都没成功实现目的。唉,要不是对反编译出来的汇编代码的理解不到一点,也不用翻了那么久也没找到相应代码,可惜不知道该去哪里补充这类知识。
又完美的失败了。

第三个思路,已知程序里面有两串字符用于计算注册码的。

尝试对这两串字符的访问下断,找到了一些读取这两段字符的代码,问题是依然看不出是不是比较注册码的。失败。
尝试把字符串清0,结果发现,注册码没有像想象中变成固定值。失败。

第四个思路,来源于思路二,直接对软件运行时的内存进行修改,修改机器码为机器码A(已知注册码的)。

运行软件,打开winhex,打开程序的全部内存,查找机器码,修改为机器码A,重复直到所有机器码修改完。回到软件,发现机器码已变成机器码A,输入机器码A对应的注册码,成功运行。

问题是,重新运行软件,又提示要注册。根据以往经验,知道有内存补丁这回事,于是找到了机器码在内存中的存放地址,成功了制作了内存补丁。通过内存补丁,软件正常使用。

问题是,机器码存放在内存的地址可能会变化的,机器码也可能会变化的,而现有的内存补丁制作工具不能适应这种变化。

于是我想自己制作一个工具,有一个输入框可以获取机器码的(包括自动读取或用户自己输入),然后根据获取的机器码打开软件,在软件内存中查找替换机器码为机器码A,这样根据已知机器码A的注册码就可以正常使用软件了。

问题是,对读取修改内存这方面的编程知识我几乎没了解过。只能以失败告终。

关于本事件的介绍如上,恳请各位高手给予指点。

补充:

一组机器码和对应注册码
000000000000000000(机器码)  0NDGVUP4O9W200(注册码)

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 10500
活跃值: (2159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
1:换软件
2:选中cimg.exe      按shift+del  回车一下轻松搞定
2012-3-24 08:56
0
雪    币: 52
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这是什么回答?彻底删除了还干什么。。。
2012-3-24 09:04
0
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
4
cimg.exe
0040cf51 eax=0012F2E8  
[0012F2E8] = 0239D1BC  ASCII "73BN88UUQ9PP69D336"  注册码
2012-3-24 18:26
0
雪    币: 6
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=无聊的菜鸟;1056414]cimg.exe
0040cf51 eax=0012F2E8  
[0012F2E8] = 0239D1BC  ASCII "73BN88UUQ9PP69D336"  注册码[/QUOTE]

激动ing!非常感谢!

通过内存注册机成功截获注册码,问题完美解决。再次感谢!

看来得多学点东西才行啊,不知你有什么资料好推荐?关于逆向的。

已经买了intel汇编5,看雪的加密解密3,感觉还是有点不够。
2012-3-24 19:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
路过学习一下
2012-3-24 22:17
0
游客
登录 | 注册 方可回帖
返回
//