由于工作的需求,我们需要使用模拟键盘鼠标、找图功能来实现一些自动化的测试需求。我很快就想到了按键精灵。
稍微用了下按键精灵,发现其还包含了一些插件库。其中Bkgnd.dll是我打算使用的,至少满足了我工作的需求。不过,也存在两个问题。
其一,这些库是基于COM接口方式调用的,而我更加希望直接调用
其二,内部包含了验证,第三方的程序无法LoadLibrary这些库
破验证:
- 使用PEID查看,无壳。
- 使用OD加载,进行单步跟踪。由于破验证比较简单,我这里就不截图分析了。思路是这样的:对于DLL而言,DllMain返回1则表示成功,返回0则表示失败。因此我们在调试过程中重点关注CALL后导致eax赋值为0的情况。
- 使用IDA的Graph View 配合OD的调试是个非常好的选择。可以很直观的识别出分支结构。
- 经过几次的试探性调试,发现0x1000ABA0处为验证函数Call。如下图:
- 爆破改成JE即可。如上图就算修改完成了。
- 当然,不止此方法。比如在DLLMain中直接mov eax,1 # jmp到ret也是可以的。
找CALL
我们已经知道,此DLL是基于COM接口来编写的。也就是说没有现成的导出函数。因此无法直接调用。
不过我们可以尝试用IDA来看看。一般而言,这种基于命令的功能库,“字符串大法”是肯定要试试的。
可以发现,这些库并没有采取任何的加密措施来提高逆向难度。我们使用X交叉引用来看看:
很显然,这里比较的可疑。首先,结构比较的工整。总感觉这些名字和下面的sub_xxxxxx一定有不可告人的联系。我们不妨看看。反正也是猜测,错了就错了。拿FindPic为例:
我们分析下sub_10003B90:
我们要做的就是判定sub_10003B90是不是就是FindPic对应的函数。最最简单的方式是看看参数个数和格式是不是匹配。
从IDA上看,一共8个参数。在按键精灵中也提示8个参数。那基本上就八九不离十了。
稍微注意下,IDA是无法识别float类型的数据。一般而言,如果参数中涉及到小数点,基本上是float类型。现在我们可以写程序验证了:
到这里就算结束了。在调试的过程是,我们还发现了VMProtect的限定标志,但是并没有使用VMProtect来处理。这大大降低了我们的难度。
资源文件在:https://pan.baidu.com/s/1MBRmF9iT2Qv7-BuFlDyBTA 提取码:ti59 适合小白练手。
来源:freebuf.com 2020-08-03 16:23:48 by: yankaish
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册