一个c++软件,无壳确定是不是采用文件验证,找不到方向。
本帖最后由 skyward 于 2021-7-20 18:47 编辑### 描述:
一个13年的软件,没有加壳, 附带的授权也不能正常工作,反映在导出功能不正常,无注册文件的情况下,有行数限制200行左右,授权文件导入后,功能依旧无法使用,表现为导出只有几行且不提示(这不是更糟糕了),找了几天仍无头绪,范围太大了,水平有限,希望得到大佬指点,感激不尽。
- 07.20 增加了测试用的工程文件
- 用文件下的run post processor 如果导出的文件大于8k 说明正常
链接: https://pan.baidu.com/s/1TlSnUNAc9BWdAhkKDD5SGw 提取码: 4eg2
### 目前的问题:
- 不清楚导出的地方是否才需要验证。
- 下断内存访问报错退出,本来想先解决这个问题,之前学的又给忘了
### 思路:
- 一开始想直接试用入手解决行数限制的问题,代码太复杂理解不了,弄了好几天也没结果。
- 转变思路,既然导出功能做了限制,是否可以从内存断点出发从而来确认关键判定位置,步骤如下:
-通过API下断CreateFileW,查看文件加载顺序,程序太长所以直接跟进到下一个文件加载,并在此时查内存写入位置地址。
注册文件内容130字节:
- 注册文件写入地址103965FA~103966CA ,大小121字节。
- 找到了注册的位置,随即下断内存访问,提示出错,看来还是得先解决报错的问题
```
调用堆栈: 主线程, 条目 12
地址=0019F0F0
堆栈=00AC8FBE
函数过程 / 参数=user32.MessageBoxW
调用来自=wxmsw28u.00AC8FB8
结构=0019F0EC
```
文本查找定位,发现上方有跳转,不过紧接着还是错误,向上查找,半天未果。
- 偶然这次下断不跳错误了来到下面这个位置。
```
10014EE9 817D FC B000000>cmp dword ptr ss:,0xB0; 取176个字节
```
到这里走出来后跳转更多了,有点不知所措了,来来试好几个点,非计算机专业,还忘大佬们勿喷。 我说的是10399040地址的值是关键,图上不是关键点,图上是在About里面,会断下。
可直接修改对该处的赋值。
搞了半天不知导出功能在哪里,帮助也没有export之类的字眼,硬改显示授权
软件不会用,10399040地址的值应该才是关键
lies2014 发表于 2021-7-19 20:49
搞了半天不知导出功能在哪里,帮助也没有export之类的字眼,硬改显示授权
硬改没用的,那边只是显示,只用到了最前面的最多16个字节,真正验证的时候应该是用后半部分 scncrenyong 发表于 2021-7-19 21:06
软件不会用,10399040地址的值应该才是关键
试了程序打开-》工程导入-》导出 都没断下来不是这个位置了,我增加范例工程文件,打开后【文件】下的【run post procesor】 只要文件能大于8K 就说明成功了,最早找到过关键流程,但是打开跟导出都会断下来,进的太里面了,那一段是遍历路径的,外面的程序又找不到关键位置,没有思路,能帮忙再看下吗 本帖最后由 skyward 于 2021-7-20 18:53 编辑
scncrenyong 发表于 2021-7-20 09:21
我说的是10399040地址的值是关键,图上不是关键点,图上是在About里面,会断下。
按大佬的改动点改了,貌似变成试用版的提示了,你说的那边修改点已经修改了。
试用就会提示 Error: Evaluation limit reached
### 试用时提示也是这样
大佬能再帮忙看下这段该怎么看吗,看了半天内存也没看出啥来,原谅我水平太菜了,只学了皮毛
没办法,又从关键处理函数入手了,陆续又搞了一天,眼睛都花了
### 处理函数
关键的路径处理函数下断的话可以看到路径怎么生成的,导出应该也是跟据这里的算法出来的,只是我不清楚到底哪里是关键
- 关键的处理函数,提示框会停留在这里
- 这个应该就是决定导出行为了
- 下面是路径处理了,在打开时也会处理
能力有限暂时解决不了,先放着吧
页:
[1]