|
[原创]初步逆向,未发现QQ扫描隐私文件
我个人认为TX的行为有一定的国家行为,并非都是TX自己要这么做的 |
|
[原创]Delphi 内联汇编函数库(积累贴) 更新中...
汇编函数自然是手工写的,但是调试的话也只能靠OD调试正确性了, 至于 API 的实现 比如你说的 ExitProcess 这API 虽然位于 kernel32.dll 但是他依然调用了 ntdll.dll , 说明是在调用底层驱动, 比如 ZwTerminateProcess ,所以你如果要实现,你得从 R0 下手了。 NTSTATUS NtTerminateProcess( __in_opt HANDLE ProcessHandle, __in NTSTATUS ExitStatus ) /*++ Routine Description: This function causes the specified process and all of its threads to terminate. Arguments: ProcessHandle - Supplies a handle to the process to terminate. ExitStatus - Supplies the exit status associated with the process. Return Value: NTSTATUS - Status of operation --*/ { PETHREAD Thread, Self; PEPROCESS Process; PEPROCESS CurrentProcess; NTSTATUS st; BOOLEAN ProcessHandleSpecified; PAGED_CODE(); Self = PsGetCurrentThread(); CurrentProcess = PsGetCurrentProcessByThread (Self); if (ARGUMENT_PRESENT (ProcessHandle)) { ProcessHandleSpecified = TRUE; } else { ProcessHandleSpecified = FALSE; ProcessHandle = NtCurrentProcess(); } st = ObReferenceObjectByHandle (ProcessHandle, PROCESS_TERMINATE, PsProcessType, KeGetPreviousModeByThread(&Self->Tcb), &Process, NULL); if (!NT_SUCCESS (st)) { return(st); } if (Process->Flags & PS_PROCESS_FLAGS_BREAK_ON_TERMINATION) { PspCatchCriticalBreak ("Terminating critical process 0x%p (%s)\n", Process, Process->ImageFileName); } // // Acquire rundown protection just so we can give the right errors // if (!ExAcquireRundownProtection (&Process->RundownProtect)) { ObDereferenceObject (Process); return STATUS_PROCESS_IS_TERMINATING; } // // Mark process as deleting except for the obscure delete self case. // if (ProcessHandleSpecified) { PS_SET_BITS (&Process->Flags, PS_PROCESS_FLAGS_PROCESS_DELETE); } st = STATUS_NOTHING_TO_TERMINATE; for (Thread = PsGetNextProcessThread (Process, NULL); Thread != NULL; Thread = PsGetNextProcessThread (Process, Thread)) { st = STATUS_SUCCESS; if (Thread != Self) { PspTerminateThreadByPointer (Thread, ExitStatus, FALSE); } } ExReleaseRundownProtection (&Process->RundownProtect); if (Process == CurrentProcess) { if (ProcessHandleSpecified) { ObDereferenceObject (Process); // // Never Returns // PspTerminateThreadByPointer (Self, ExitStatus, TRUE); } } else if (ExitStatus == DBG_TERMINATE_PROCESS) { DbgkClearProcessDebugObject (Process, NULL); } // // If there are no threads in this process then clear out its handle table. // Do the same for processes being debugged. This is so a process can never lock itself into the system // by debugging itself or have a handle open to itself. // if (st == STATUS_NOTHING_TO_TERMINATE || (Process->DebugPort != NULL && ProcessHandleSpecified)) { ObClearProcessHandleTable (Process); st = STATUS_SUCCESS; } ObDereferenceObject(Process); return st; } |
|
[转帖]据说是一道月薪万元的面试题 看看你能不能做出来
玩一下 代码溢出 就行 |
|
[原创]Delphi 内联汇编函数库(积累贴) 更新中...
比如 CreateFileEx 与 CreateFile 如果不精确计算 则是相同的 CRC32 CRC32 通常是 DWORD 双字节 截取计算 那么 剩余的部分会被去掉,精确计算就是 被4整除的部分 进行 遍历计算,最后剩下的余数再计算一次 这样就精确了 可以保证 API 名称都拥有不同的 CRC32 |
|
[原创]delphi 内联汇编 API内存搜索引擎(带注释)
// 功能 数字型转成 16进制 字符串型(非String版) // 参数EAX = 10进制数字 // 参数EDX = 16进制字符串格式长度 // 参数ECX = 指向字符串(array[0..100] of char)指针 // 返回有效字符串长度 //作者 饿狼传说 (lofullen) function IntToHexA(Value: Integer; Digits: Integer; lpBuffer: Pchar): Integer; asm PUSH ESI MOV ESI, ESP SUB ESP, 32 PUSH EDI MOV EDI, ECX MOV ECX, 16 // 这里改成 XOR ECX, ECX 就本函数就成了 IntToStrA 了 PUSH EDX PUSH ESI @D1: XOR EDX,EDX DIV ECX DEC ESI ADD DL,'0' CMP DL,'0'+10 JB @D2 ADD DL,('A'-'0')-10 @D2: MOV [ESI],DL OR EAX,EAX JNE @D1 POP ECX POP EDX SUB ECX,ESI SUB EDX,ECX JBE @D5 ADD ECX,EDX MOV AL,'0' SUB ESI,EDX JMP @z @zloop: MOV [ESI+EDX],AL @z: DEC EDX JNZ @zloop MOV [ESI],AL @D5: MOV EAX, ECX REP MOVSB POP EDI ADD ESP, 32 POP ESI end; 我就不开贴了, 本汇编函数附送给大家了, 彻底摆脱 Delphi 的 string 结构, 可以在纯KOL环境下编译,这个 string 结构比较复杂,移植能力非常的差,本汇编可以帮助大家转换, 另外一个 strtoint 可以用 API 代替。 |
|
[原创]delphi 内联汇编 API内存搜索引擎(带注释)
事先就可以算好CRC了 直接把算好的CRC 放在程序里 然后供搜索程序匹配 |
|
[原创]delphi 内联汇编 API内存搜索引擎(带注释)
{*************** 本汇编主要功能就是计算短字符串精确CRC32 计算 参数 eax = 字符串指针 返回 crc32 作者 饿狼传说 (lofullen) ***************} FUNCTION CalcBufferCRC(lpBuffer:PAnsiChar): Cardinal; assembler; var checksum : DWORD; asm push ebx push ecx push edx push edi push esi mov ebx, eax call LStrLengthA // eax = 字符串长度 xor edx, edx // edx = 整除后的余数 mov ecx, 4 div ecx xor ecx, ecx @@loopBegin: dec eax // eax = 整除后的整数 jl @@loopOver xor ecx, dword ptr ds:[ebx] // ecx = CRC32 add ebx, 4 jmp @@loopBegin @@loopOver: test edx, edx // 如果有余数则执行 je @@Nochecksum mov eax, ecx mov esi, ebx // esi = 剩余字节的首指针 lea edi, checksum mov dword ptr ds:[edi], 0 // checksum 归零 这样的做法为了保证只读取 00 之前的剩余字节 mov ecx, edx rep movsb // checksum 得到剩余字节(自然是小于4咯) lea edi, checksum xor eax, dword ptr ds:[edi] // 最后一次计算 jmp @@calcEnd @@Nochecksum: mov eax, ecx // 直接获取 ECX 中的 CRC32 @@calcEnd: pop esi pop edi pop edx pop ecx pop ebx end; 补充一份改进型 字符串型精确 CRC32 急速算法 |
|
[讨论]搞安全,路在何方?---研究生的迷茫!
黑客技术娴熟者必然对 windows 内核情有独钟, 研究生同学, 你既然是研究生说明你走的是正道,那么我劝你暂时放弃windows 内核, 等到各方面技术过关以后再回来研究,通常只有走邪道的人才会提早进入内核界,为了达到以小博大的功效 |
|
[原创]启发式查毒,全过。
我用汇编写过,好像行不通啊,首先执行这代码的应该不是DLL,GetModuleHandle(nil) 说明是EXE模块, 把EXE自身的输出表长度设置成80000000h 在以 kernel32.WinExec 的形式调用 GetProcAddress 那么。 你这个EXE 自身肯定没有输出表, 我跟踪过 ntdll 的 LdrGetProcedureAddress 和 帖子里所说的 LdrpSnapThunk , 但似乎对于自身没有输出表的他会遍历所有模块,但是好像不是遍历所有输出表,包括 kernel32.dll, 但是我不理解的是,他已经跑到别的模块中找输出表了,你对自身设置输出表大小有何作用? |
|
[分享]改进型USP10.DLL劫持技术, 算是基本全过了
嘿嘿 分享一下喜悦嘛。。。 |
|
[原创]纯汇编USP10.DLL劫持
呵呵 LZ 我**,那些**别鸟他们,这年头云查杀技术泛滥任何免杀其实都是无意义的。。。这代码纯汇编写的,跟出源码有何分别,通常半斤不足,八两不鲜的人才出来狒 |
|
[原创]TMD/WL 代码修复讲解
好吧,只能把压箱底的东西拿出来晒晒了 |
|
[原创]TMD/WL 代码修复讲解
什么样的程度能评个精华啊?我想有个0的突破~~~ |
|
[原创]TMD/WL 代码修复讲解
吃得苦中苦,方得人上人的道理,不然你让TMD怎么生存,VM的优秀就在于不怕你技术好,就怕你吃苦耐劳! |
操作理由
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 }}
勋章
兑换勋章
证书
证书查询 >
能力值