按键精灵插件库突破限制 – 作者:yankaish

由于工作的需求,我们需要使用模拟键盘鼠标、找图功能来实现一些自动化的测试需求。我很快就想到了按键精灵。

稍微用了下按键精灵,发现其还包含了一些插件库。其中Bkgnd.dll是我打算使用的,至少满足了我工作的需求。不过,也存在两个问题。

其一,这些库是基于COM接口方式调用的,而我更加希望直接调用

其二,内部包含了验证,第三方的程序无法LoadLibrary这些库

破验证:

  • 使用PEID查看,无壳。图片[1]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科
  • 使用OD加载,进行单步跟踪。由于破验证比较简单,我这里就不截图分析了。思路是这样的:对于DLL而言,DllMain返回1则表示成功,返回0则表示失败。因此我们在调试过程中重点关注CALL后导致eax赋值为0的情况。
  • 使用IDA的Graph View 配合OD的调试是个非常好的选择。可以很直观的识别出分支结构。
  • 经过几次的试探性调试,发现0x1000ABA0处为验证函数Call。如下图:图片[2]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科
  • 爆破改成JE即可。如上图就算修改完成了。
  • 当然,不止此方法。比如在DLLMain中直接mov eax,1 # jmp到ret也是可以的。

找CALL

     我们已经知道,此DLL是基于COM接口来编写的。也就是说没有现成的导出函数。因此无法直接调用。图片[3]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科

不过我们可以尝试用IDA来看看。一般而言,这种基于命令的功能库,“字符串大法”是肯定要试试的。

图片[4]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科可以发现,这些库并没有采取任何的加密措施来提高逆向难度。我们使用X交叉引用来看看:

图片[5]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科很显然,这里比较的可疑。首先,结构比较的工整。总感觉这些名字和下面的sub_xxxxxx一定有不可告人的联系。我们不妨看看。反正也是猜测,错了就错了。拿FindPic为例:

我们分析下sub_10003B90:

图片[6]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科我们要做的就是判定sub_10003B90是不是就是FindPic对应的函数。最最简单的方式是看看参数个数和格式是不是匹配。

从IDA上看,一共8个参数。在按键精灵中也提示8个参数。那基本上就八九不离十了。

稍微注意下,IDA是无法识别float类型的数据。一般而言,如果参数中涉及到小数点,基本上是float类型。现在我们可以写程序验证了:

图片[7]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科图片[8]-  按键精灵插件库突破限制 – 作者:yankaish-安全小百科

到这里就算结束了。在调试的过程是,我们还发现了VMProtect的限定标志,但是并没有使用VMProtect来处理。这大大降低了我们的难度。

资源文件在:https://pan.baidu.com/s/1MBRmF9iT2Qv7-BuFlDyBTA  提取码:ti59  适合小白练手。

 

来源:freebuf.com 2020-08-03 16:23:48 by: yankaish

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论