|
IDA Pro 4.90 边界线插件源代码
//楼主代码编译不成功主要是因为找不到空间植入代码,改函数FindSpaceForMyCode如下,加载成功 BYTE* FindSpaceForMyCode() { BYTE* ptr = (BYTE*)&debug - 16 * 1024; do { while (*ptr != 0xcc) ptr++; if (*(DWORD*)ptr == 0xcccc && *((DWORD*)ptr + 1) == 0) return ptr; } while (ptr++ < (BYTE*)&debug); return NULL; } |
|
是谁教我用壳SDK的?
蛋蛋要的就是这种效果!蛋蛋也不容易 |
|
|
|
writefile放出DLL有点问题,放出来的和原来自定义资源的好像不一样
00401369 |. 50 PUSH EAX ; /hResource 0040136A |. E8 9F000000 CALL <JMP.&KERNEL32.LockResource> ; \LockResource 0040136F |. 0BC0 OR EAX,EAX 00401371 |. 74 41 JE SHORT 11.004013B4 00401373 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX 00401376 |. 6A 00 PUSH 0 ; /hTemplateFile = NULL 00401378 |. 6A 00 PUSH 0 ; |Attributes = 0 0040137A |. 6A 01 PUSH 1 ; |Mode = CREATE_NEW 0040137C |. 6A 00 PUSH 0 ; |pSecurity = NULL 0040137E |. 6A 00 PUSH 0 ; |ShareMode = 0 00401380 |. 68 00000040 PUSH 40000000 ; |Access = GENERIC_WRITE 00401385 |. 68 28204000 PUSH 11.00402028 ; |FileName = "c:\windows\system32\isapc.dll" 0040138A |. E8 61000000 CALL <JMP.&KERNEL32.CreateFileA> ; \CreateFileA 0040138F |. 50 PUSH EAX 00401390 |. 8F45 E8 POP DWORD PTR SS:[EBP-18] 00401393 |. 6A 00 PUSH 0 ; /pOverlapped = NULL 00401395 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] ; | 00401398 |. 50 PUSH EAX ; |pBytesWritten 00401399 |. FF75 F4 PUSH DWORD PTR SS:[EBP-C] ; |nBytesToWrite 0040139C |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] ; |//这一句出错,正确的应该是mov eax, [ebp-10] 0040139F |. 50 PUSH EAX ; |Buffer = 0012FFA8 004013A0 |. FF75 E8 PUSH DWORD PTR SS:[EBP-18] ; |hFile 004013A3 |. E8 72000000 CALL <JMP.&KERNEL32.WriteFile> ; \WriteFile 004013A8 |. 0BC0 OR EAX,EAX 004013AA |. 74 08 JE SHORT 11.004013B4 |
|
[求助]关于catch22上自杀代码在GCC下的编译问题.
用MINGW不能自动删除是因为编译器对于函数地址解释与VC不同的原因: 出错代码如下: local.fnWaitForSingleObject = (FARPROC)WaitForSingleObject; local.fnCloseHandle = (FARPROC)CloseHandle; local.fnDeleteFile = (FARPROC)DeleteFile; local.fnSleep = (FARPROC)Sleep; local.fnExitProcess = (FARPROC)ExitProcess; local.fnRemoveDirectory = (FARPROC)RemoveDirectory; local.fnGetLastError = (FARPROC)GetLastError; WaitForSingleObject得到的并不是函数地址,而是间接调用地址,对应的反汇编代码如下: 401160: c7 85 90 fb ff ff c0 movl $0x4013c0,0xfffffb90(%ebp) 004013c0 <_WaitForSingleObject@8>: 4013c0: ff 25 d8 40 40 00 jmp *0x4040d8 4013c6: 90 nop 4013c7: 90 nop 当在远程代码是调用local.fnWaitForSingleObject等函数的时候,也就是调用$0x4013C0这个地址,而这个地址在远程代码所在进程中不是WaitForSingleObject函数的调用。 当用VC编译的时候,编译器传入的是WaitForSingleObject直接地址,这个直接地址在整个NT操作系统所有的进程空间中的地址都是一样的,不用考虑DLL重定位后的地址不同这个问题。 所以正确的VC和GCC编译器通用代码应该是传递WaitForSingleObject等函数的直接地址,如下: HINSTANCE hKernel; hKernel = LoadLibrary("kernel32.dll"); local.fnWaitForSingleObject = GetProcAddress( hKernel, "WaitForSingleObject"); // 其它的函数... FreeLibrary(hKernel); 附修改后的代码及DEV-CPP工程文件: |
|
[原创][下载]PEEK 0.6
好,以前我都是用strings命令,只是不支持中文.现在终于有中文的了 |
|
[求助]关于catch22上自杀代码在GCC下的编译问题.
#pragma pack(push, 1) 这里有详细的解释:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_predir_pack.asp #define CODESIZE 0x200 定义复制到远程线程中代码长度 #define FUNC_ADDR(func) (PVOID)(*(DWORD *)((BYTE *)func + 1) + (DWORD)((BYTE *)func + 5)) 这个宏表示得到近CALL或者近跳转地址,它们指令长度都是5字节,例如: DEBUG版生成如下形式代码, .text:004110D7 sub_4110D7 proc near ; CODE XREF: sub_411280+90p .text:004110D7 ; sub_411280+110p ... .text:004110D7 jmp sub_411880 .text:004110D7 sub_4110D7 endp FUNC_ADDR(sub_4110D7)宏后就得到sub_411880这个地址 |
|
[求助]关于FI的设计思路
特征匹配,一般来说选的是程序入口处的代码。当然如果深入点,加上虚拟机运行个1K指令再来了行为判断就更好了。哈哈 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值