traceme 爆破小记


在 OD 中 F3 加载 traceme.exe

F9 运行,出现如下界面



猜测输入使用 GetDlgItemTextA,

ctrl + F2 重新运行,快捷键 ctrl + G 查找到 GetDlgItemTextA 位置处,下断点。



F9 运行,弹出注册界面,输入用户名 hello,序列号 world。



按下 check,执行到 GetDlgItemTextA。按 F8 继续走。注意“信息窗口”,

会出现 “stack address=0012F968, (ASCII "hello")” 这样的信息。



猜测 call traceme.00401340 执行判断的逻辑。先继续 F8 往下走。

发现在 je short traceme.0040122E 处发生跳转。并且在最终弹出错误提示。

于是猜测若是  je short traceme.0040122E 不发生跳转可能可能成功。



重新执行,在执行到  je short traceme.0040122E 处将 ZF 改为 0,发现不跳转。

F8 继续走会出现成功的提示。

修改  je short traceme.0040122E 为 nop 指令。并保存。





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Python 2实现的ptrace子进程挂载的示例代码: ```python import os import sys import ctypes from ctypes.util import find_library # 加载libc库 libc = ctypes.CDLL(find_library('c')) # 定义ptrace相关函数 ptrace = libc.ptrace waitpid = libc.waitpid PTRACE_TRACEME = 0 PTRACE_ATTACH = 16 PTRACE_SETOPTIONS = 16896 PTRACE_O_TRACECLONE = 8 def main(argv): if len(argv) < 2: print 'Usage: %s program [args...]' % argv[0] return # 创建子进程 pid = os.fork() if pid == 0: # 子进程 # 调用ptrace(PTRACE_TRACEME, 0, NULL, NULL)告诉父进程它要被跟踪 ptrace(PTRACE_TRACEME, 0, None, None) # 执行新程序 os.execvp(argv[1], argv[1:]) else: # 父进程 # 调用ptrace(PTRACE_ATTACH, pid, NULL, NULL)将子进程挂载到自己的进程上 ptrace(PTRACE_ATTACH, pid, None, None) # 等待子进程停止 waitpid(pid, None, 0) # 设置选项,允许跟踪子进程创建 ptrace(PTRACE_SETOPTIONS, pid, None, PTRACE_O_TRACECLONE) while True: # 跟踪子进程执行 waitpid(-1, None, 0) # 在子进程执行过程中,可以通过ptrace()系统调用跟踪、修改子进程的执行 # 这里省略具体实现,可以使用PTRACE_PEEKTEXT和PTRACE_POKETEXT等函数读写子进程的内存 # 也可以使用PTRACE_CONT和PTRACE_KILL等函数控制子进程的执行 ``` 这段代码通过调用libc库中的ptrace、waitpid等函数实现了ptrace子进程挂载的功能。需要注意的是,由于Python 2的GIL机制,多线程程序中调用ptrace可能会出现问题,因此建议在单线程环境下使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值