吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14524|回复: 44
收起左侧

[原创] MapoEngine简单的自动化反汇编工具

  [复制链接]
wmsuper 发表于 2018-12-31 17:49
0x00 指令解释
关于handler分析在我另一篇文章(https://www.52pojie.cn/thread-773387-1-1.html)中已经非常详细的说明了,以下是handler特征码以及说明,如果以后有更新可以更改mapo.py中定义的特征码。
[Python] 纯文本查看 复制代码
'VM_PushRealStackTop32':['mov eax, dword ptr [esp]','sub ebp, 4','mov dword ptr [ebp], eax'] 压入esp指向的值到栈上
'VM_PopR32':['movsx eax, byte ptr [esi]','mov edx, dword ptr [ebp]','add ebp, 4','mov dword ptr [edi + eax], edx'] 将32位的值弹到寄存器上
'VM_Add32':['mov eax, dword ptr [ebp]','add ebp, 4','add dword ptr [ebp], eax'] 将栈上的两个值相加
'VM_PushR16':['movsx eax, byte ptr [esi]','mov ax, word ptr [edi + eax]','mov word ptr [ebp], ax'] 压入16位的寄存器值
'VM_ExecRealInst':['mov dword ptr [esp - 4], esi','push dword ptr [edi]','popfd','ret'] 退出虚拟机,执行未虚拟化的代码
'VM_PopSp':['mov eax, dword ptr [ebp]','mov ebp, eax']   设置vm_esp的值
'VM_PushStackTop32':['mov eax, dword ptr [ebp]','sub ebp, 4','mov dword ptr [ebp], eax']  将栈上的值再次压入栈
'VM_PushI8':['mov al, byte ptr [esi]','sub ebp, 1','mov byte ptr [ebp], al'] 压入8位立即数
'VM_Nop':[] 无操作
'VM_Popfd':['pushfd','pop dword ptr [edi]'] 将真实flag寄存器压入虚拟机的flag寄存器中
'VM_Extend16To32':['movzx eax, word ptr [ebp]','sub ebp, 2','mov dword ptr [ebp], eax']  将16位值扩展成32位
'VM_PushI16':['mov ax, word ptr [esi]','sub ebp, 2','mov word ptr [ebp], ax'] 压入16位立即数
'VM_Nor32':['mov edx, dword ptr [ebp + 4]','not eax','not edx','add ebp, 4','and eax, edx','mov dword ptr [ebp], eax'] 将栈上两个值nor
'VM_PopRealfd':['push dword ptr [edi]','popfd']  将虚拟机的flag弹出到真实的寄存器
'VM_Retn':['push dword ptr [edi]','popfd','ret'] 退出虚拟机
'VM_Shr32':['mov ecx, dword ptr [ebp]','mov eax, dword ptr [ebp + 4]','shr eax, cl','add ebp, 4','mov dword ptr [ebp], eax'] 右移
'VM_PushI32':['mov eax, dword ptr [esi]','sub ebp, 4','mov dword ptr [ebp], eax'] 压入32位的立即数
'VM_ShortJMP':['mov edx, dword ptr [esi]','imul edx','add esi, edx'] 短跳转
'VM_ReadDs16':['mov eax, dword ptr [ebp]','mov ax, word ptr [eax]','mov word ptr [ebp], ax'] 读16位内存值
'VM_CALL':['push dword ptr [ebp]','pop dword ptr [ebp - 4]','lea esp, dword ptr [ebp + 4]','push dword ptr [esi]','ret'] 退出虚拟机,函数调用
'VM_ReadDs8':['mov eax, dword ptr [ebp]','mov al, byte ptr [eax]','mov byte ptr [ebp], al']    读8位内存值
'VM_Neg_':['mov eax, dword ptr [ebp]','neg eax','inc eax','mov dword ptr [ebp], eax']	求补码后+1
'VM_Imul32':['mov eax, dword ptr [ebp + 4]','mov edx, dword ptr [ebp]','imul edx','mov dword ptr [ebp + 4], eax','mov dword ptr [ebp], edx'] 将栈上两个值mul
'VM_JMP':['movzx eax, byte ptr [ebp]','add ebp, 4','mov esi, dword ptr [ebp + eax*4]','add ebp, 8'] 根据标志位进行跳转
'VM_PopR16':['mov dx, word ptr [ebp]','add ebp, 2','mov word ptr [edi + eax], dx'] 将16位的值弹到寄存器上
'VM_AddSp':['movzx eax, word ptr [esi]','add ebp, eax'] 调整栈指针
'VM_Sub32':['mov eax, dword ptr [ebp]','add ebp, 4','sub dword ptr [ebp], eax']  将栈上两个值sub
'VM_WriteDs32':['mov eax, dword ptr [ebp]','mov edx, dword ptr [ebp + 4]','mov dword ptr [eax], edx'] 写32位内存
'VM_WriteDs8':['mov eax, dword ptr [ebp]','mov dl, byte ptr [ebp + 4]','mov byte ptr [eax], dl'] 写8位内存
'VM_PushR32':['movsx eax, byte ptr [esi]','mov eax, dword ptr [edi + eax]','sub ebp, 4','mov dword ptr [ebp], eax'] 压入32位的寄存器值
'VM_WriteDs16':['mov eax, dword ptr [ebp]','mov dx, word ptr [ebp + 4]','mov word ptr [eax], dx'] 写16位内存
'VM_PopR8':['mov dl, byte ptr [ebp]','add ebp, 1','mov byte ptr [edi + eax], dl'] 将8位的值弹到寄存器上
'VM_ReadDs32':['mov eax, dword ptr [ebp]','mov eax, dword ptr [eax]','mov dword ptr [ebp], eax'] 读32位内存值
'VM_PushR8':['movsx eax, byte ptr [esi]','add esi, 1','mov al, byte ptr [edi + eax]','sub ebp, 1','mov byte ptr [ebp], al'] 压入8位的寄存器值
'VM_GetAddESP':['movzx eax, byte ptr [esi]','lea eax, dword ptr [ebp + eax]','sub ebp, 4','mov dword ptr [ebp], eax'] 获取esp+某个立即数后的值
'VM_Neg':['mov eax, dword ptr [ebp]','neg eax','mov dword ptr [ebp], eax'] 求补码
'VM_Extend8To32':['movsx eax, byte ptr [ebp]','sub ebp, 3','mov dword ptr [ebp], eax'] 将8位值扩展成32位

0x01 工具功能
自动化识别handler
自动化反汇编(这里和反虚拟化有非常大的距离,只用于辅助分析)
效果图:
e语言 的oep:
(3ET96U3%2))8WVWWTUHQ)G.png
反汇编如下:
P%BGM4ZDEFH64Y]48GE4`76.png
0x02 补充
这个工具花了2到3天编写,有bug在所难免,不过代码是开源的,如果有需要可以自己修改,个人的精力终究有限。
提前祝大家新年快乐!!!

下载.txt

71 Bytes, 下载次数: 311, 下载积分: 吾爱币 -1 CB

下载地址

免费评分

参与人数 22威望 +2 吾爱币 +44 热心值 +21 收起 理由
千载难逢 + 1 + 1 谢谢@Thanks!
cxp521 + 1 + 1 谢谢@Thanks!
Sound + 2 + 15 感谢发布原创作品,吾爱破解论坛因你更精彩!
bhwl + 1 + 1 谢谢@Thanks!
飘零未忍 + 1 + 1 谢谢@Thanks!
lyrong + 1 + 1 谢谢@Thanks!
言不由衷啊 + 1 + 1 热心回复!
笙若 + 1 + 1 谢谢@Thanks!
朱朱你堕落了 + 1 + 1 纯支持
泽雨天下 + 1 + 1 新年快乐
pxhb + 2 + 1 感谢分享,辛苦了
chenjingyes + 1 + 1 楼主幸苦了,谢谢分享
黑木棍 + 1 + 1 我很赞同!
雨天阴天 + 1 + 1 谢谢@Thanks!
Ravey + 1 + 1 谢谢@Thanks!
懒惰的上帝 + 3 + 1 热心回复!
cbkui + 1 + 1 谢谢@Thanks!
LEP + 1 + 1 谢谢@Thanks!
CrazyNut + 3 + 1 前排膜拜大佬
魔弑神 + 2 + 1 鼓励转贴优秀软件安全工具和文档!
我是一个小白 + 1 + 1 前排膜拜一下dalao
凉游浅笔深画眉 + 3 + 1 晴天师傅又放大招了

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

视觉℡ 发表于 2019-1-24 08:45
这个好             收下了                  
凉游浅笔深画眉 发表于 2018-12-31 17:51
本帖最后由 凉游浅笔深画眉 于 2018-12-31 17:53 编辑

支持一波晴天师傅  
zhj 发表于 2018-12-31 18:03
我是一个小白 发表于 2018-12-31 18:04
前排支持一波晴天dalao
大东华、 发表于 2018-12-31 18:13 来自手机
晴天师傅牛皮
懒惰的上帝 发表于 2018-12-31 18:55
卧槽 这么炸天 支持一波
JakerPower 发表于 2018-12-31 19:32
优秀软件安全工具和文档 支持一下
SxmSwd326 发表于 2018-12-31 19:46
楼主很棒,支持一下
撸达湿 发表于 2018-12-31 22:24
手动支持一波
ruphay 发表于 2018-12-31 22:37
感觉楼主好厉害!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 15:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表