# ida_deobfuscator **Repository Path**: TheHepta/ida_deobfuscator ## Basic Information - **Project Name**: ida_deobfuscator - **Description**: ida解混淆插件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-03-03 - **Last Updated**: 2025-03-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # IDA_deobfuscator 基于IDA/Miasm库的解混淆插件,支持对于OLLVM的解混淆 # 日志 ## 2022/5/5 ### 1 1. 使用第二次扫描,第二次扫描将会分析出度为0的图节点; 2. 对于出度为0的图节点,判断其状态值,以此确定下一块的位置; 3. 更新cfg图 存在一些问题: 1. 地址0x10021184的状态值解析不正常,它的状态值设置不符合其他块的模式,故用原来的模式进行匹配不成功; 2. 且上地址一个完整的asmblock被分为多个小的asmblock,在节点层面的分析将会失败,需要在ircfg层次进行分析 ### 2 为了解决地址0x10021184的块的问题,更改了匹配状态值的模式: 1. `emotet.deal_with_muti_statement`函数中,现在将会在ircfg层次对模式进行分析;该函数将会倒序查找设置了ESI值的语句,并且解析得到状态值; 2. `emotet.leaves_scanner`函数中,将会使用`mylib.cfg_search_pred_logic`函数,以找到前驱的逻辑块 > 前驱逻辑块满足:为当前块的唯一前驱,当前块为前驱逻辑块的唯一后继,即两块可以合》> 并,则在状态值的逻辑上前驱块等价; 3. 更改函数`emotet.stop_on_jmp`,在当前块的最后一条指令为`jmp`且前一条指令为`add`时,将不会停止反汇编 ,更改保证了`emotet.deal_with_muti_statement`对于地址0x10021892处的例子的分析的正确性; ### 3 1. emotet的解混淆实现完成 # 模式匹配 读取`replace_config.json`文件 ```json { //规则列表 "replace_list":[ { "tag":"", //tag标签 "match_sequence":[ //匹配的指令序列 { "op_name":"mov",//指令名称 "op_num":2, //指令操作数 "operand":[] //操作数 }, { } ], "fix_sequence":[ //替换的指令序列 { } ] } ] } ```