攻防世界——csaw2013reversing2
2023-12-29 19:54:17
最基本反调试
运行完是乱码
int __cdecl __noreturn main(int argc, const char **argv, const char **envp)
{
int v3; // ecx
CHAR *lpMem; // [esp+8h] [ebp-Ch]
HANDLE hHeap; // [esp+10h] [ebp-4h]
hHeap = HeapCreate(0x40000u, 0, 0);建立堆
lpMem = (CHAR *)HeapAlloc(hHeap, 8u, SourceSize + 1);申请空间使用堆
memcpy_s(lpMem, SourceSize, &unk_409B10, SourceSize);将unk复制给lpmem
if ( !sub_40102A() && !IsDebuggerPresent() )sub返回就是0不管——IsDebugg就是反调试
{
MessageBoxA(0, lpMem + 1, "Flag", 2u);
HeapFree(hHeap, 0, lpMem);释放空间
HeapDestroy(hHeap);
ExitProcess(0);
}
__debugbreak();防止动调
sub_401000(v3 + 4, lpMem);生成flag函数
ExitProcess(0xFFFFFFFF);退出
}
这逻辑图
在第一个jnz,我们要直接跳到生成flag函数,不判断
这里就跳掉结束了,我们改成跳入输出flag
(注意!!int3在汇编中是中止的意思,所以我们还要nop掉)
成果图
再保存一下,运行
————————————————————————————————
文章来源:https://blog.csdn.net/wcj126/article/details/135296283
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!