wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows – x86逆转挑战中的打包和加密部分,没有绊倒熵启发式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

任务: 我正在构建一组x86汇编逆向工程挑战,其中我已经完成了大约20个左右.他们只是为了娱乐/教育. 当前的挑战是更先进的挑战之一,并且涉及一些技巧,使得它看起来像EP实际上在正常程序中,但它实际上被包装在另一个PE部分中. 继承人的基本流程: >就像它是一个普通的MSVC应用程序一样开始. >向一堆反调试器技巧注入一个偷偷摸摸的电话. >如果它们通过,则内存中的DWORD设置为1. >稍后在程
任务:

我正在构建一组x86汇编逆向工程挑战,其中我已经完成了大约20个左右.他们只是为了娱乐/教育.

当前的挑战是更先进的挑战之一,并且涉及一些技巧,使得它看起来像EP实际上在正常程序中,但它实际上被包装在另一个PE部分中.

继承人的基本流程:

>就像它是一个普通的MSVC应用程序一样开始.
>向一堆反调试器技巧注入一个偷偷摸摸的电话.
>如果它们通过,则内存中的DWORD设置为1.
>稍后在程序流程中,它检查该值是否为1,如果它有效,则解密一个小的调用表.如果它失败了,它就会通过疯狂的反调试技巧将它们发送出去,最终只会崩溃.
>调用表指向解密实际程序代码段的真实解密例程.
>调用解密例程,并使用基本循环xor解密(C ^ k ^ n,其中C是密文,k是32位密钥,n是当前数据偏移)
> VirtualProtect用于将部分的保护标志从RW切换到RX.
>控制流被重定向到OEP,程序运行.

这个想法是因为他们认为他们处于正常的程序流程中,这使得他们错过了反调试和后来的检查.无论如何,一切正常.

问题:

目前的问题是,OllyDbg和其他一些工具会查看打包部分并发现它具有较高的熵,并发出一个警告,说它已经打包了. PE头中的代码段指针是正确设置的,所以它不会从EP外部代码中得到它 – 它纯粹是一个熵分析的东西.

题:

有没有我可以使用的加密方法保留低熵,但仍然很容易在x86 asm中实现?我不想使用普通的xor,因为它太容易了,但我也不希望它像包装一样抓住它并让游戏消失.

我想到了一个类似洗牌器的东西(以某种方式生成一个密钥流并使用它来交换4字节的代码块),但我不确定这是否会起作用,甚至是简单的.

有人有任何想法吗?

解决方法

实际上,OllyDbg就像这个伪代码一样工作:

useful_bytes = number_of_bytes_in_section - counT_Bytes_with_values(0x00,0x90,0xCC)
warn about compression if useful_bytes > 0x2000 and counT_Bytes_with_values(0xFF,0xE8,0x8B,0x89,0x83) / useful_bytes < 0.075

因此,避免该警告的方法是在压缩部分中使用值为0xFF 0xE8 0x8B 0x89 0x83的足够字节.

大佬总结

以上是大佬教程为你收集整理的windows – x86逆转挑战中的打包和加密部分,没有绊倒熵启发式全部内容,希望文章能够帮你解决windows – x86逆转挑战中的打包和加密部分,没有绊倒熵启发式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。