首页
社区
课程
招聘
[原创]识别并计算出除数
2024-1-23 21:29 7038

[原创]识别并计算出除数

2024-1-23 21:29
7038

主要是作为个人笔记,自娱自乐,大手子们,不喜勿喷.

源自一个简单的想法,通过特征码匹配模式来识别反汇编除法。后续逐步收集switch-case和虚函数等特征码来完善现在的树结构。


下面是要匹配的三种模式:

  1. "MethodModel":"argc/-4=%d"
  2. "MethodModel":"uargc/7=%u"
  3. "MethodModel":"argc/7=%d"

按照规则,构建的属性结构如下(此处显示部分,完整版附件下载DivTree.json):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{"div":{
    "Left":{
        "shr":{
            "Left":{
                "add":{
                    "Left":{
                        "shr":{
                            "Leaf":"End",
                            "MethodModel":"uargc/7=%u"
                        }
                    },
                    "Leaf":"End",
                    "MethodModel":"argc/7=%d",
                    "Right":null
                }
            },
            "Right":null
        }},
    "Right": {
        "Left":{
            "sar":{
                "Left":{
                    "neg":{
                        "Leaf":"End",
                        "MethodModel":"argc/-4=%d"
                    }
                }
            }
        }
    },
    "Reverse":{
    }
}}

通过解析,提取关键数据计算除数,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import re
from ASTCore import *
 
HelloASTCore()
 
# argc/7=%d
# 除数为有符号非2的幂
def div_argc_7_d():
    print("argc/7=%d")
    bigNum = int(lsInsUp[-1].split(",")[1].replace('h',''),16)
    matchKeyPos = [i for i, s in enumerate(lsInsUp) if re.search(r'sar\s+edx',s)] # the pos of shr
    if len(matchKeyPos)>0:
        powerNum = 32 + int(lsInsUp[matchKeyPos[0]].split(",")[1].replace('h',''), 16)
        print(f"div: /{2**powerNum/bigNum}")
 
# argc/-4=%d
# 除数为有符号负2的幂
def div_argc_neg_4_d():
    print("argc/-4=%d")
    num = int(lsInsDown[0].split(",")[1], 16)
    print("num=",num)
    print(f"div: /-{num**2}")
     
AnalyCaseTable = {"argc/7=%d":div_argc_7_d, "argc/-4=%d":div_argc_neg_4_d}
for k,v in AnalyCaseTable.items():
    if k == methodMatched:
        v()

测试一个分析的代码片段:

1
2
3
4
5
6
7
002210B9 mov         eax,92492493h
002210BE imul        esi
002210C0 add         edx,esi
002210C2 sar         edx,2
002210C5 mov         eax,edx
002210C7 shr         eax,1Fh
002210CA add         eax,edx

分析的结果如下:


如果有感兴趣的朋友,可以私信我,一起探讨相关话题.


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

最后于 2024-1-23 21:34 被_THINCT编辑 ,原因:
上传的附件:
收藏
点赞4
打赏
分享
最新回复 (2)
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_ldbucrik 2024-1-23 22:06
2
1
太厉害了
雪    币: 17901
活跃值: (25552)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2024-1-24 11:08
3
2
感谢分享
游客
登录 | 注册 方可回帖
返回