手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中

商用硬件Token设备软件实现中的Envelope漏洞分析

来源:本站整理 作者:佚名 时间:2019-04-29 TAG: 我要投稿

以及

现在,我们就获得了一些VM检测代码。
实际上,通过封装器入口点中的一些函数,你会看到很多来自以下链接的复制粘贴代码:https://www.cnblogs.com/zhangdongsheng/archive/2012/07/02/2573416.html
通常情况下,封装者会混淆这种逻辑,以使识别或修改变得更加困难。在这种情况下,如果你修改此部分中的任何字节,应用程序都将关闭(无论如何都不会正常运行)。

在最初的拆封过程中有一些校验和被用来阻止篡?#27169;?#19981;过它们看起来更像是检查一个硬编码的值,该值不用于任何其他用途。因此,可以很容易地更改结果值或完全删除检查而不产生任何后果。
除此之外,它是寻找进程名称的非常典型的检查(例如ollydbg,idaq,softice等)。
需要注意的一件事是,因为我们标记了LC API函数,所以我们还可以看到这些API调用的执行位置。这样,我们可以看到调用LC_passwd的位置,这意味着,我们也知道了硬编码后的?#29992;?#29399;密码的位置。

现在,我们就可以开始解析封装器的流程了。
解析封装过程
在?#28304;?#22810;数内容进行标记分析之后,解析封装器的过程就非常简单。所以我会简要的说一下,因为有很多示例文件,比如动态绑定解析、反调试检查?#22836;磛m或反篡改检查,它们在大多数封装的二进制文件和一些?#31896;?#31649;理工作中都很常见。解析过程如下:
* Iterate each section of the exe that is marked as executable (e.g. a CODE section)
  -> Log into the Dongle,
  -> Send the hardcoded exe key (16 bytes) to the dongle's "encrypt" fuction.
  -> Retrieve the 16 byte key result.
  -> Use the key result in a Rijndael function to decrypt the given section in place.
* Go to a hardcoded offset in the .lcsh section
* Decrypt the a blob of data scraped from the original Import Address Table (in place)
  using the same method of getting a key and Rijndael and all that stuff from the code
  sections.
* Read the original IDT in plaintext from a hardcoded offset in the .lcsh section.
* Use the newly decrypted original IAT and IDT to write various offsets to
  relocation points and additional locations to reflect the IAT's new location.
* Jump to OEP (this address is also hardcoded into .lcsh).
1.可以看出,这个封装器做的任何事情都不会造成损失或破坏。因此,我们决定静态地重构一个可运行的非封装可执行文件。
2.我们应该能够复制所有这些步骤,值得注意的是,搞清楚整个过程不需要动态分析。因为没有垃圾代码、阻止反汇编的宏和混淆策略,所以静态地搞清楚这些步骤非常简单。
3.既然我们理解了这个过程,那么我们应该能?#36824;?#24314;一个可以解压缩给定可执行文件的脚本。不过其中会受到一些限制:
3.1我们需要?#29992;?#37027;个exe密钥,Envelope生成器会随机创建一个128位的值用于?#29992;?#29399;。因此,所有的exe?#38469;?#19981;同的。因此,如果发布了更新的可执行文件,则还得依?#23548;用?#29399;。
3.2我们可能希望选择性地指定一个预先录制的?#29992;?#23494;钥,这样就不总是需要?#29992;?#29399;了,并在使用?#29992;?#29399;时,使用某种打印输出来查看生成的?#29992;?#23494;钥。
3.3我们有一个dll ,甚至有一个64位dll,但由于API存在漏洞,所以供应商建议使用32位版本。因此,我们将使用带有Python Ctypes的32位供应商API dll,,并在我们的解封器中放入合法的?#29992;?#29399;交互。
除了?#29992;?#29399;的硬编码密钥和密码之外,它们所在的一般区域还有一些其他有趣的值。

在CFFExplorer中打开我们的原始exe,此时会出现一些值。

此时,我们就可以开始构建这个area中存在的内容了,并正确解压所涉及的重要可执行文件,比如:
1.OEP(即程序的入口点,可以用OD载入,不分析代码);
2.电子狗密码;
3.预?#29992;?#30340;EXE密钥;
4.原?#21152;?#20687;基底;
5.?#29992;?#30340;IAT偏移和大小;
6.IDT偏移量和大小;
7. 初始重定位目录;
编写一个解封器
注意:其中包含了代码。
为了使整个编写过程更容易,我们将使用2个Py3模块:
1.pefile;
2.py3rijndael;
PEfile模块非常适合处理pe文件或自动执行这类任务,我们在示例中使用的是Rijndael的初始py3模块,因为这是封装器用来?#29992;?#21644;解密代码块的。
第1步:加载Senselock数据块
首先是加载PE文件并从数据块中转储有趣的值,类似于:

注意,如果?#29992;?#29399;可用,我们可以使用针对“LC.dll”(pylc)创建的最小绑定派生出EXE密钥。密码和开发人员ID可以直接从可执行文件中读取。因此,不需要额外的配置。
第2步?#33322;?#23494;所有代码段
接下来,我们必须迭代每个部分,并?#33539;?#23427;是否可执行。我们可以通过检查“IMAGE_SCN_MEM_EXECUTE”标志的每个部分来实现这一点。如果是这样,我们使用Rijndael和EXE密钥解密该部分。

上一页  [1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.rliwo.live)登载此文出于传递更多信息之目的,并不代表本站赞同其观点?#25237;?#20854;真实性负责,仅适于网络安全?#38469;?#29233;好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱[email protected],我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载
        购买彩票权威网址
        手机上怎么买彩票双色球 微信上有人推荐买彩票 能合买彩票的平台 夫妻买彩票狂中30亿 买彩票心态 买彩票就买大乐透开奖结果 哪个平台买彩票安全吗 买彩票有买一个号的吗 怎么看走势图买彩票 如何在电脑上买彩票 美国几岁可以买彩票? 福彩工作人员买彩票 彩客网买彩票 能在微信上买彩票吗 怎么买彩票容易中
        黄金工厂闯关 开心农场 团购 河北13号快三走势图 神秘的诱惑走势图 山东十一选五开奖视频 马刺vs湖人 尤里战火风云心灵信标 征服者入侵返水 中国新年为什么要给红包 魔术兔电子