能力值:
( LV2,RANK:10 )
|
-
-
51 楼
好人啊...
|
能力值:
( LV2,RANK:10 )
|
-
-
52 楼
先记录,再仔细学习。
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
喜欢delphi的 谢了
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
厉害啊 下载一份
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
太感谢了,很好用
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
厉害 支持楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
57 楼
好东西,要收藏。
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
谢谢分享!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
好贴啊,学习了
|
能力值:
( LV6,RANK:80 )
|
-
-
60 楼
不错的东西。顶了。
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
MARK,感谢楼主分享
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
问个我一直想弄明白的问题,就是IDA里面反汇编界面怎么在左边显示汇编对应的机器码?我看您的图里有,我找不到怎么开启。
|
能力值:
( LV12,RANK:400 )
|
-
-
63 楼
IDA -> Options -> General -> Number of opcode bytes
这里指定要显示的字节码数目
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
好东西 标记下,收藏
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
还没看过驱动^~^
|
能力值:
( LV9,RANK:200 )
|
-
-
66 楼
多谢了,正好用得着
|
能力值:
( 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: 找到一个或多个多重定义的符号
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
我是菜鸟,还没搞懂呢,请指教
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
这个 CmdData,是定义的一个数据类型,为什么要把CmdDataTable[] 弄成这种类型呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
请问这个引擎可以进行汇编处理么?
|
能力值:
( 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);
就是这句,
|
能力值:
( LV2,RANK:10 )
|
-
-
72 楼
领教啦,谢谢分享
|
能力值:
( LV8,RANK:130 )
|
-
-
73 楼
666
|
|
|