首页
社区
课程
招聘
[原创]递归抠汇编代码插件(grcasm)bin+sourcecode
2014-1-1 12:06 18222

[原创]递归抠汇编代码插件(grcasm)bin+sourcecode

2014-1-1 12:06
18222
grcasm可以将选中的反汇编代码以裸体函数的形式保存至文件。目的是方便将裸体函数复制到VC里面直接编译,比较适合懒人。。

grcasm能做的事情:
1.对API的处理
void __declspec (naked) SUB_00706DC2()
{
	__asm{
		MOV DWORD PTR DS:[ESI], EDI
		PUSH ESI
		CALL DWORD PTR [GetVersionExA] ;kernel32.GetVersionExA
		MOV ECX, DWORD PTR DS:[ESI+0x10]
	}
}

2.对swtich table的处理
OD显示的反汇编代码
00411370    55                          PUSH EBP
00411371    8BEC                        MOV EBP, ESP
00411373    81EC DC000000               SUB ESP, 0xDC
00411379    53                          PUSH EBX
0041137A    56                          PUSH ESI
0041137B    57                          PUSH EDI
0041137C    8DBD 24FFFFFF               LEA EDI, DWORD PTR SS:[EBP-0xDC]
00411382    B9 37000000                 MOV ECX, 0x37
00411387    B8 CCCCCCCC                 MOV EAX, 0xCCCCCCCC
0041138C    F3:AB                       REP STOS DWORD PTR ES:[EDI]
0041138E    C745 F8 00000000            MOV DWORD PTR SS:[EBP-0x8], 0x0
00411395    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
0041139C    8B45 F8                     MOV EAX, DWORD PTR SS:[EBP-0x8]
0041139F    8985 24FFFFFF               MOV DWORD PTR SS:[EBP-0xDC], EAX
004113A5    8B8D 24FFFFFF               MOV ECX, DWORD PTR SS:[EBP-0xDC]
004113AB    83E9 01                     SUB ECX, 0x1
004113AE    898D 24FFFFFF               MOV DWORD PTR SS:[EBP-0xDC], ECX
004113B4    83BD 24FFFFFF 05            CMP DWORD PTR SS:[EBP-0xDC], 0x5
004113BB    77 41                       JA SHORT testgrca.004113FE
004113BD    8B95 24FFFFFF               MOV EDX, DWORD PTR SS:[EBP-0xDC]
004113C3    FF2495 08144100             JMP DWORD PTR DS:[EDX*4+0x411408]
004113CA    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113D1    EB 2B                       JMP SHORT testgrca.004113FE
004113D3    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113DA    EB 22                       JMP SHORT testgrca.004113FE
004113DC    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113E3    EB 19                       JMP SHORT testgrca.004113FE
004113E5    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113EC    EB 10                       JMP SHORT testgrca.004113FE
004113EE    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113F5    EB 07                       JMP SHORT testgrca.004113FE
004113F7    C745 EC 00000000            MOV DWORD PTR SS:[EBP-0x14], 0x0
004113FE    33C0                        XOR EAX, EAX
00411400    5F                          POP EDI
00411401    5E                          POP ESI
00411402    5B                          POP EBX
00411403    8BE5                        MOV ESP, EBP
00411405    5D                          POP EBP
00411406    C3                          RETN
00411407    90                          NOP
00411408    CA 1341                     RETF 0x4113
0041140B    00D3                        ADD BL, DL
0041140D    1341 00                     ADC EAX, DWORD PTR DS:[ECX]
00411410    DC13                        FCOM QWORD PTR DS:[EBX]
00411412    41                          INC ECX
00411413    00E5                        ADD CH, AH
00411415    1341 00                     ADC EAX, DWORD PTR DS:[ECX]
00411418    EE                          OUT DX, AL
00411419    1341 00                     ADC EAX, DWORD PTR DS:[ECX]
0041141C    F713                        NOT DWORD PTR DS:[EBX]
0041141E    41                          INC ECX
0041141F    00CC                        ADD AH, CL


grcasm生成的裸体函数
void __declspec (naked) SUB_00411370()
{
	__asm{
		PUSH EBP
		MOV EBP, ESP
		SUB ESP, 0X000000DC 
		PUSH EBX
		PUSH ESI
		PUSH EDI
		LEA EDI, DWORD PTR SS:[EBP-0xDC]
		MOV ECX, 0X00000037 
		MOV EAX, 0XCCCCCCCC 
		REP STOS DWORD PTR ES:[EDI]
		MOV DWORD PTR SS:[EBP-0x8], 0x0
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		MOV EAX, DWORD PTR SS:[EBP-0x8]
		MOV DWORD PTR SS:[EBP-0xDC], EAX
		MOV ECX, DWORD PTR SS:[EBP-0xDC]
		SUB ECX, 0X00000001 
		MOV DWORD PTR SS:[EBP-0xDC], ECX
		CMP DWORD PTR SS:[EBP-0xDC], 0X00000005 
		JA LABEL_00000000
		MOV EDX, DWORD PTR SS:[EBP-0xDC]
		CMP EDX, 0X00000000
		JE SWITCH_CASE_00000000_00000000
		CMP EDX, 0X00000001
		JE SWITCH_CASE_00000000_00000001
		CMP EDX, 0X00000002
		JE SWITCH_CASE_00000000_00000002
		CMP EDX, 0X00000003
		JE SWITCH_CASE_00000000_00000003
		CMP EDX, 0X00000004
		JE SWITCH_CASE_00000000_00000004
		CMP EDX, 0X00000005
		JE SWITCH_CASE_00000000_00000005
SWITCH_CASE_00000000_00000000:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		JMP LABEL_00000001
SWITCH_CASE_00000000_00000001:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		JMP LABEL_00000002
SWITCH_CASE_00000000_00000002:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		JMP LABEL_00000003
SWITCH_CASE_00000000_00000003:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		JMP LABEL_00000004
SWITCH_CASE_00000000_00000004:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
		JMP LABEL_00000005
SWITCH_CASE_00000000_00000005:
		MOV DWORD PTR SS:[EBP-0x14], 0x0
LABEL_00000000:
LABEL_00000001:
LABEL_00000002:
LABEL_00000003:
LABEL_00000004:
LABEL_00000005:
		XOR EAX, EAX
		POP EDI
		POP ESI
		POP EBX
		MOV ESP, EBP
		POP EBP
		RETN
	}
}

3.对call的处理,递归处理每一个call,将每一个call以裸体函数的形式保存至文本

4.对内存数据的处理,可以以字节,字,双字的形式(十六进制)将选中的内存或者代码保存至文本

grcasm不能做的事情:
1.反汇编中存在内存地址的时候
void __declspec (naked) SUB_00412714()
{
	__asm{
		LEA EBX, DWORD PTR SS:[EBP-0x404]
		XOR ECX, ECX
		LEA ESP, DWORD PTR SS:[ESP]
		MOV DL, BYTE PTR DS:[ECX+0x415D8C]	//此处只能以硬编码形式保存
		MOV BYTE PTR SS:[EBP+ECX-0x404], DL
		INC ECX
		TEST DL, DL
	}
}


目前grcasm将文本默认存储至C盘,在源代码里面大家可以自己修改。

最后祝大家新年快乐!
grcasm_bin.zip

grcasm_sourcecode.zip

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (37)
雪    币: 7834
活跃值: (3022)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ldljlzw 2014-1-1 12:46
2
0
很不错的一个插件~~~顶
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-4 08:36
3
0
thanks
雪    币: 31
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
smartdog 2014-1-4 10:13
4
0
递归能走多少层?要是拿来提取注册码会很方便
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-4 10:30
5
0
递归30几层应该没问题
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nfgfgo 2014-1-7 00:16
6
0
带ss: ds:之类的段 r0 r3通用吗
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-7 10:48
7
0
能用OD加载,和反汇编就能抠取代码,之前有看到论坛有人发的插件可以加载驱动,所以理论上应该是R0 ,R3 的都能抠。

带SS: DS:,在编程的时候可以不用写吧,编译器会做好?我个人理解,不知道对不对,我写内联汇编没带上SS: 和 DS:,VS编译之后也没出现问题。
雪    币: 2863
活跃值: (1592)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chixiaojie 2014-1-9 02:39
8
0
这个插件是针对 OD 1.10 还是 OD 2.01,你要说明一下。
雪    币: 138
活跃值: (460)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
Nermor 1 2014-1-9 09:13
9
0
OD 1.10 的
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 2014-1-10 07:40
10
0
嗯,好久没有新插件了,顶
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-10 09:35
11
0
thanks
雪    币: 293
活跃值: (232)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
瀚海云烟 1 2014-1-10 09:56
12
0
感觉这插件屌爆了
扣注册算法应该很好用
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2014-1-10 10:06
13
0
Multiline Ultimate Assembler等插件貌似也有类似的功能。
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-10 15:29
14
0
是的,共同点都是抠取汇编代码,grcasm只是在他们的基础上做了更多的工作,让VC可以直接编译
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-10 15:30
15
0
thanks
雪    币: 319
活跃值: (2299)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2014-1-10 21:07
16
0
是的,测试了一下。的确好用,谢谢!
雪    币: 479
活跃值: (273)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hellopen 2014-1-11 10:00
17
0
thanks
雪    币: 27
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寂寞寒烟 2014-2-17 10:05
18
0
非常不错,非常感谢
雪    币: 2443
活跃值: (434)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
飘云 1 2014-2-22 15:54
19
0
好东西@!
雪    币: 1392
活跃值: (3171)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
方向感 2014-3-7 22:41
20
0
为啥在win7 x64下用官方的http://www.ollydbg.de/odbg110.zip 也不能加载这个插件啊?

居然要自己重新编译一下才能加载。
雪    币: 2654
活跃值: (3401)
能力值: ( LV13,RANK:1760 )
在线值:
发帖
回帖
粉丝
安于此生 34 2014-3-7 22:44
21
0
感谢分享,以后用的上
雪    币: 95
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JingSao 2014-3-7 23:17
22
0
我只能说,楼主,你太强大了
雪    币: 116
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sysercn 2014-3-7 23:28
23
0
我也是。。。加载不上 目测是运行库缺少
雪    币: 1392
活跃值: (3171)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
方向感 2014-3-8 11:07
24
0
vs2010/vs2012重新编译一下就可以了。顺便去掉多于的菜单项,不然od的右键菜单中太多内容了,屏幕小都显示不了

vs2012编译的时候需要加上 /SAFESEH:NO
雪    币: 237
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yulinxie 2015-4-10 15:14
25
0
复制到剪切板比保存到c盘文件好用点
游客
登录 | 注册 方可回帖
返回