|
|
|
[开源]快速转换dll到shellcode工具
malokch 还是喜欢用gcc干这活gcc确实方便,不过现在我魔改了下clang来干这个活,看了humeafo大佬的项目受到了启发,大佬没有开源,我就自己写了一个,github: https://github.com/humeafo/scc |
|
|
|
|
|
|
|
[原创]开源ShellCode生成引擎
BlackTrace 不是特别明白,一直想是实现一下这个工具,https://bbs.pediy.com/thread-141055.htm不是一个东西啊。那个主要是做编码和测试ShellCode时候用的吧 |
|
[原创]开源ShellCode生成引擎
lovehuai 我还是喜欢用 Subroutine Displacement EngineSDE魔改之后还是挺好用的多线程啥的都没问题SDE确实不错,当时我看见的时候确实让我惊艳,但是局限还是蛮大的,不能使用类什么的,而且delphi和bc生成的代码优化没有vc那么给力。所以后来我研究了如何使用vc生成shellcode,那个代码优化的真是棒所以才有了这个东西,另外还有个vc的shellcode框架 |
|
[原创]开源ShellCode生成引擎
BlackTrace 谢谢楼主得分享,然后我在想,能不能做成exe2shellcode呢这个可以做,但是只是做成一个pe加载器,并不能叫shellcode,exe生成shellcode需要自己编码然后在编译器里进行设置,之前研究过如何使用vc直接生成shellcode |
|
|
|
[原创]开源ShellCode生成引擎
完成自己的承诺,现在放到Github上 地址为 https://github.com/killeven/ObjToShellCode,代码比较糟糕大家凑合看一下,曾经看到通过编译器生成的Obj文件加壳的文章才想到这个,其实就是个抛砖引玉的作品,感谢 Anskya大佬对我的帮助,希望版主看到可以加个精。 |
|
[原创]VT调试器 X64
@viphack |
|
不明白为什么非要改成ret 8,ret2,哪来的?如何计算出来的?
那就赶紧结贴吧= =我要转正式会员 |
|
把这10行代码翻译成delphi版可好
if (NT_SUCESS(ntStatus) and (SystemInformationClass = SystemProcessesAndThreadsInformation)) then begin pSystemProcesses = PSYSTEM_PROCESSES(SystemInformation); while True do begin if (pSystemProcesses^.ProcessId = $12345678) then // 如果是我们需要隐藏的PID就进行数据修改 begin if (pSystemProcesses^.NextEntryDelta) then begin // 当我们需要隐藏的进程后面还有进程时 // 越过我们自己进程让NextEntryDelta直接指向下一个数据块 Inc(Prev^.NextEntryDelta, pSystemProcesses^.NextEntryDelta); end else begin // 当我们进程处于最后一个数据那么我们就把上一个数据结构的NextEntryDelta置0 // 这时系统在遍历我们进程时就不会发现了 Prev^.NextEntryDelta := 0; end; break; end; if (not pSystemProcesses^.NextEntryDelta) then break; Prev := pSystemProcesses; pSystemProcesses := PSYSTEM_PROCESSES(integer(pSystemProcesses) + pSystemProcesses^.NextEntryDelta); end; end; |
|
不明白为什么非要改成ret 8,ret2,哪来的?如何计算出来的?
这个是看堆栈的,你仔细看下堆栈变化,也可以这么说 retn的值取决于你压入的参数个数 你说的那个问题 为什么要 retn 10 004B1599 |. 56 push esi 004B159A |. 6A 18 push 18 004B159C |. 52 push edx 004B159D |. 50 push eax 004B159E |. E8 6D210100 call 004C3710 004B15A3 |. A3 F84B5300 mov dword ptr [534BF8], eax 004B15A8 |. 85C0 test eax, eax 004B15AA |. 7D 0A jge short 004B15B6 004B15AC |. C705 F84B5300>mov dword ptr [534BF8], 168 004B15B6 |> 8B8C24 281000>mov ecx, dword ptr [esp+1028] 这里它压入了四个数 即 4*4 = 16 也就是 0x10 所以retn 10 同理 004AE212 |. 6A 01 push 1 004AE214 |. 8D9424 141000>lea edx, dword ptr [esp+1014] 004AE21B |. 52 push edx 004AE21C |. E8 1F29F7FF call 00420B40 004AE221 |. A2 C03C4F00 mov byte ptr [4F3CC0], al 4*2 = 8 故 retn 8 这样就言简意赅了吧。。。咳咳.. 一个栈占四个字节 就这么算 你压入一个参数 就占一个栈.很通俗了吧 |
|
不明白为什么非要改成ret 8,ret2,哪来的?如何计算出来的?
平衡堆栈用的. retn x 等同于 ret add esp,x 其实也就是自平衡堆栈 和 函数自动平衡堆栈的问题也就是 cdecl 和 stdcall两种方式。 反正我是这么理解的 简单来说就是 (cdecl) push 1 push 2 call xxxxxx add esp,8 xxxxx函数的返回方式为 ret (stdcall) push 1 push 2 call xxxxxxxx xxxxxx函数的返回方式为 retn 8 理解或许有疏忽,谅解。 |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值