攻防世界,Reverse:Hello, CTF

1.解题过程:

(1)

题中有提示,涉及密码

这个附件可以运行,输入测试

查壳

无壳,32位系统,拖入32位IDA中查看

shift+f12查找字符串

发现一个与密码相关的字符串,双击跳转 

找到位置,f5一键反汇编查看伪代码

(2)分析:

 若v10与v13相等,返回值为0,即 !0=1 输出Success

往回一路分析可以得出以下(如图)

按照我写的注释从1-9倒推

最后我们知道用户输入的是flag

当flag字符串转为十六进制数与v13中的数相等时为正确的值

所以只需要将v13的16进制数转换为文本则可得flag

我们可以验证一下

输入得出的字符串

2.知识点:

(1)IDA常用快捷键:

        f5:一键反汇编

        shift+f12:可以打开string窗口,一键找出所有的字符串

(2)伪代码中涉及到的函数:

          strcpy():

         C 库函数 char *strcpy(char *dest,  const char *src)  把 src 所指向的字符串复制到 dest

          memset():

         C 库函数 void *memset(void *str,  int c,  size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符

         strlen():

         C 库函数 size_t strlen(const char *str) 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符

         strcmp():

         C 库函数 int strcmp(const char *str1,  const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较

         strcat():

         C 库函数 char *strcat(char *dest const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾

         sprintf():

         C 库函数 int sprintf(char *str const char *format,  ...) 发送格式化输出按照格式说明所描述的文字规则进行输出到 str 所指向的字符串

(3)asc_408044代表16进制

可以双击对应的代码返回查看编码

从左到右分别是内存地址机器码汇编指令

 %x对应十六进制整型变量

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Part 03

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

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

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

打赏作者

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

抵扣说明:

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

余额充值