ida先静态分析,发现有很多a2[1]不知道是什么,就远程动调了一下,发现是我们所输入的字符串,也就是我们所输入的字符串作为索引,通过v4这个数组输出,这题题目的数据漏给了,当时也是一头雾水,后面找了wp,才发现题目漏了条件,就是正确的flag输入后,会输出95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a



所以现在就是意思是查v4的表,然后再反推序号就得出flag了,然而发现那个v4的表是变动的。



有个随机值,后面在ida中,找到了eax的种子,发现不会超过0xff。



也就是有256种可能性,逐个爆破就可以得出flag了,而且题目提示了flag的格式是T开头,那我们就可以利用这个T字母作为动调的参数,T在表中对应0x95时,说明这个表是我们想要的,取下来,再逆向得出flag。

ida主要使用函数.


for i in range(1,256):
RunTo(0x80485b1)
GetDebuggerEvent(WFNE_SUSP,-1)
print(i)
SetRegValue(i,"eax") RunTo(0x8048704)
GetDebuggerEvent(WFNE_SUSP,-1)
w=GetRegValue("eax") RunTo(0x8048746)
GetDebuggerEvent(WFNE_SUSP,-1)
SetRegValue(0x80486D4,"eip")
if w==0x95:
print i
break
RunTo(0x80485b1)
GetDebuggerEvent(WFNE_SUSP,-1)
print i
SetRegValue(i,"eax")
RunTo(0x8048746)
GetDebuggerEvent(WFNE_SUSP, -1)
addre=GetRegValue("esp")
addre=addre+0x1C
arr=[]
for i in range(0xff):
arr.append(Byte(addre+i))
tmp="95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a"
a=[]
for j in range(0,len(tmp),2):
a.append(arr.index(int(tmp[i:i+2],16)))
print("".join(map(chr,a)))

最新文章

  1. GroupJoin和Join的声明及调用
  2. python【4】-函数
  3. java文件上传和下载
  4. 后台返回json数据,前台显示代码
  5. 利用 libiconv 实现汉字编码 utf-8 格式 和 gbk格式的相互转换
  6. android studio 0.8.11 如何导入Library(新手向)
  7. chm文件右边部分查看不了
  8. MSSQL2005数据库自动备份问题(到同一个局域网上的另一台电脑上)
  9. linux上安装ftp
  10. 概率好题 Light OJ 1027
  11. 一起学JUCE之HashMap
  12. Google Firebase Unity接入的坑
  13. Java学习笔记之集合
  14. python_如何在一个for循环中迭代多个可迭代对象?
  15. NOI2001 食物链
  16. NIO下_使用示例
  17. UVA1601 状态搜索
  18. MapReduce-序列化(Writable)
  19. c#之枚举,结构体
  20. 移植最新Uboot到JZ2440开发板

热门文章

  1. 标准Gitlab命令行操作指导
  2. Spring框架两大核心机制(IoC、AOP)
  3. 物联网设备OTA软件升级之:升级包下载过程之旅
  4. Go语言网络通信---tcp群发消息
  5. IoU、GIoU、DIoU、CIoU损失函数
  6. Eclipse修改默认的语言编码设置,处理乱码
  7. fiddler选项卡-Composer(构建请求)
  8. 端午总结Vue3中computed和watch的使用
  9. JavaScript DOM编程艺术第四章 — JavaScript图片库案例研究
  10. 基于Android平台的图书管理系统的制作(4)