攻防世界——csaw2013reversing2

最基本反调试

借鉴博客

运行完是乱码

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掉)

成果图

再保存一下,运行

————————————————————————————————

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Nickname

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值