首页
社区
课程
招聘
[原创]为你的驱动挂上外挂 - 嵌入反汇编引擎
发表于: 2011-9-25 22:11 49156

[原创]为你的驱动挂上外挂 - 嵌入反汇编引擎

2011-9-25 22:11
49156
收藏
免费 7
支持
分享
最新回复 (72)
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
好人啊...
2012-6-26 22:39
0
雪    币: 208
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
先记录,再仔细学习。
2012-9-22 11:44
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
喜欢delphi的 谢了
2012-9-22 12:30
0
雪    币: 110
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
厉害啊 下载一份
2012-9-22 13:52
0
雪    币: 381
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
太感谢了,很好用
2012-10-31 17:50
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
厉害 支持楼主
2012-10-31 22:20
0
雪    币: 64
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
好东西,要收藏。
2012-11-2 23:24
0
雪    币: 224
活跃值: (157)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
谢谢分享!!!!
2012-11-6 09:53
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
好贴啊,学习了
2012-11-7 23:27
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
60
不错的东西。顶了。
2012-11-8 03:22
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Edj
61
MARK,感谢楼主分享
2013-1-30 15:26
0
雪    币: 158
活跃值: (339)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
问个我一直想弄明白的问题,就是IDA里面反汇编界面怎么在左边显示汇编对应的机器码?我看您的图里有,我找不到怎么开启。
2013-2-17 19:51
0
雪    币: 535
活跃值: (245)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
63
IDA -> Options -> General -> Number of opcode bytes
这里指定要显示的字节码数目
2013-2-18 12:56
0
雪    币: 111
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
好东西 标记下,收藏
2013-2-18 14:45
0
雪    币: 57
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
还没看过驱动^~^
2013-2-18 16:45
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
66
多谢了,正好用得着
2013-2-18 20:55
0
雪    币: 70
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
const CmdData CmdDataTable[] = {
        { 0x0000FF, 0x000090, 1, 00, NNN, NNN, NNN, C_NOP },  //'NOP'),
        { 0x0000FE, 0x00008A, 1, WW, REG, MRG, NNN, C_MOV },  //'MOV'),
        { 0x0000F8, 0x000050, 1, 00, RCM, NNN, NNN, C_PSH },  //'PUSH'),
        { 0x0000FE, 0x000088, 1, WW, MRG, REG, NNN, C_MOV },  //'MOV'),
        { 0x0000FF, 0x0000E8, 1, 00, JOW, NNN, NNN, C_CAL },  //'CALL'),
        { 0x0000FD, 0x000068, 1, SS, IMM, NNN, NNN, C_PSH },  //'PUSH'),

请问红色部分是嘛意思啊?编译没错,link的时候有错误,
error LNK2005: _CmdDataTable 已经在 disasm.obj 中定义

fatal error LNK1169: 找到一个或多个多重定义的符号
2013-3-22 17:46
0
雪    币: 70
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
我是菜鸟,还没搞懂呢,请指教
2013-3-22 17:47
0
雪    币: 70
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
这个 CmdData,是定义的一个数据类型,为什么要把CmdDataTable[]  弄成这种类型呢?
2013-3-22 17:48
0
雪    币: 282
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
请问这个引擎可以进行汇编处理么?
2013-3-23 20:02
0
雪    币: 282
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
void AsmTest()  //反汇编引擎测试函数
{
	ULONG       pFuncInfo=50;
	ULONG        pFuncAddress =0;
	//PVOID                pvBuf = NULL;
	UNICODE_STRING     destString;
	ULONG  DecodedLength = 0;
	ULONG  dw=0;
	Disasm  dis;
	//ULONG   ulIoControlCode;     //控制代码
	UNICODE_STRING Old_NtOpenProcess ;
   // pvBuf=(PVOID)50 ;
   // pFuncInfo = (PMyStruct)pvBuf;
	//pFuncInfo->Length=20 ;
	RtlInitUnicodeString(&Old_NtOpenProcess,L"NtOpenProcess");
	pFuncAddress=(ULONG)MmGetSystemRoutineAddress(&Old_NtOpenProcess); //获取原NtOpenProcess函数的
	if(pFuncAddress=0)
	{
		DbgPrint("反汇编引擎获取函数地址失败...") ;
		return ;
	}
	DbgPrint("反汇编引擎初始化完成...") ;
	dw = DisasmCode((PUCHAR)((ULONG)pFuncAddress+DecodedLength),pFuncInfo - DecodedLength,&dis);
	DbgPrint("数据长度[%d]",dw) ;

	return ;
	while(DecodedLength<pFuncInfo)
	{
		dw = DisasmCode((PUCHAR)((ULONG)pFuncAddress+DecodedLength),pFuncInfo - DecodedLength,&dis);
		DecodedLength = DecodedLength + dw;
		switch ( dis.cmdtype )
		{
		case C_NOP: KdPrint(("C_NOP  %d",dw)); break;
		case C_TST: KdPrint(("C_TST  %d",dw)); break;
		case C_CMP: KdPrint(("C_CMP  %d",dw)); break;
		case C_CMPS: KdPrint(("C_CMPS  %d",dw)); break;
		case C_CMPSB: KdPrint(("C_CMPSB  %d",dw)); break;
		case C_CMPSW: KdPrint(("C_CMPSW  %d",dw)); break;
		case C_CMPSD: KdPrint(("C_CMPSD  %d",dw)); break;

		case C_MOV: KdPrint(("C_MOV  %d",dw)); break;
		case C_MOVS: KdPrint(("C_MOVS  %d",dw)); break;
		case C_MOVSX: KdPrint(("C_MOVSX  %d",dw)); break;
		case C_MOVSB: KdPrint(("C_MOVSB  %d",dw)); break;
		case C_MOVSW: KdPrint(("C_MOVSW  %d",dw)); break;
		case C_MOVSD: KdPrint(("C_MOVSD  %d",dw)); break;
		case C_MOVZX: KdPrint(("C_MOVZX  %d",dw)); break;

		case C_JMP: KdPrint(("C_JMP  %d",dw)); break;
		case C_JMC: KdPrint(("C_JMC  %d",dw)); break;
		case C_CAL: KdPrint(("C_CAL  %d",dw)); break;
		case C_RET: KdPrint(("C_RET  %d",dw)); break;

		case C_XOR: KdPrint(("C_XOR  %d",dw)); break;
		case C_AND: KdPrint(("C_AND  %d",dw)); break;
		case C_OR: KdPrint(("C_OR  %d",dw)); break;
		case C_NOT: KdPrint(("C_NOT  %d",dw)); break;

		case C_PSH: KdPrint(("C_PSH  %d",dw)); break;
		case C_POP: KdPrint(("C_POP  %d",dw)); break;
		case C_PSHA: KdPrint(("C_PSHA  %d",dw)); break;
		case C_POPA: KdPrint(("C_POPA  %d",dw)); break;
		case C_PSHF: KdPrint(("C_PSHF  %d",dw)); break;
		case C_POPF: KdPrint(("C_POPF  %d",dw)); break;

		case C_ADD: KdPrint(("C_ADD  %d",dw)); break;
		case C_ADC: KdPrint(("C_ADC  %d",dw)); break;
		case C_SBB: KdPrint(("C_SBB  %d",dw)); break;
		case C_SUB: KdPrint(("C_SUB  %d",dw)); break;
		case C_INC: KdPrint(("C_INC  %d",dw)); break;
		case C_DEC: KdPrint(("C_DEC  %d",dw)); break;
		case C_MUL: KdPrint(("C_MUL  %d",dw)); break;
		case C_IMUL: KdPrint(("C_IMUL  %d",dw)); break;
		case C_DIV: KdPrint(("C_DIV  %d",dw)); break;
		case C_IDIV: KdPrint(("C_IDIV  %d",dw)); break;

		case C_NEG: KdPrint(("C_NEG  %d",dw)); break;
		case C_LEA: KdPrint(("C_LEA  %d",dw)); break;
		case C_XCHG: KdPrint(("C_XCHG  %d",dw)); break;

		case C_SHR: KdPrint(("C_SHR  %d",dw)); break;
		case C_SHL: KdPrint(("C_SHL  %d",dw)); break;
		case C_ROL: KdPrint(("C_ROL  %d",dw)); break;
		case C_ROR: KdPrint(("C_ROR  %d",dw)); break;
		case C_RCL: KdPrint(("C_RCL  %d",dw)); break;
		case C_RCR: KdPrint(("C_RCR  %d",dw)); break;
		case C_SAR: KdPrint(("C_SAR  %d",dw)); break;
		case C_SAL: KdPrint(("C_SAK  %d",dw)); break;

		case C_CLI: KdPrint(("C_CLI  %d",dw)); break;
		case C_STI: KdPrint(("C_STI  %d",dw)); break;
		case C_ENTER: KdPrint(("C_ENTER  %d",dw)); break;
		case C_LEAVE: KdPrint(("C_LEAVE  %d",dw)); break;
		case C_INT: KdPrint(("C_INT  %d",dw)); break;
		case C_INT3: KdPrint(("C_INT3  %d",dw)); break;
		case C_SYSENTER: KdPrint(("C_SYSENTER  %d",dw)); break;
		case C_SYSEXIT: KdPrint(("C_SYSEXIT  %d",dw)); break;

		default:
			KdPrint(("C_UNKNOW  %d",dw)); break;
		}

       
  


}


是引擎问题,还是代码问题, 怎么测试都不能运行,
dw = DisasmCode((PUCHAR)((ULONG)pFuncAddress+DecodedLength),pFuncInfo - DecodedLength,&dis);
       
就是这句,
2013-3-24 11:54
0
雪    币: 244
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
领教啦,谢谢分享
2013-3-25 13:22
0
雪    币: 83
活跃值: (1082)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
73
666
2019-5-30 16:08
0
游客
登录 | 注册 方可回帖
返回
//