新手一枚,如有错误(不足)请指正,谢谢!!

题目链接:[GKCTF2020]Chelly’s identity

最近忙着看书,刷题断了好久了,,,

IDA载入,shift+F12搜索字符串

双击跟到函数去,来到关键函数

我这里的IDA修改了一下基址,因为我配合OD动态调试做的,为了让函数地址与OD地址一致。
与我函数名不一样的,需要改IDA基址
先查看OD基址

然后修改IDA的

修改成OD基址0xCB0000,然后点击【OK】

从OD中找到主函数的地址部分(搜索IDA显示的地址或者搜索字符串

cin是C++的输入


然后F8单步一下,程序恢复运行,随便输入点字符串

可以看到内存窗口已经有了输入

下一个内存访问断点,看看什么时候访问输入,然后F9运行等断点断下

程序被断下,选中的部分就是循环

回IDA找地址,发现是这里的循环

此时的代码,把eax,也就是输入字符串的,第一个byte位,也就是第一个字符的地址给了ecx。

之后ecx又给了栈上的一个内存,也就是前面IDA for循环图的v16
之后把这个值v16压入栈(push edx)然后进入了1502函数

执行完一个循环,发现1771函数是获取输入的长度(多次调试变换输入发现

而11D6函数是获取复制后字符串的长度

复制的字符串存在哪呢,去看IDA

由于函数点进去再出来它的变量名就变了,,注释部分没有改,v32就是原来的v16
复制后的字符串应该存到了v34,去看v34的定义在ebp+0x48处,去OD找这个地址(不知道为啥计算出来是D98,是上一个,,但也差不了多少啦)
可以看到他把输入的字符的ASCII码按int类型存储到新的一块内存地址,也就是上图IDA中的v34

然后这个for循环就分析完毕了
CC1771函数获取输入的长度赋值给v13
然后CC1D6获取该复制的内存地址的长度,比较这两个长度,当相等的时候也就复制完毕了
然后CC1528获取每一个字符的地址,给v32
CC15D2函数将v32复制给v34指向的内存地址

然后就是下面的CC11BD函数,他将v34传了进去

双击进去,可以猜到是判断长度是否等于16(猜不到可以用OD多调试几遍,查看一下sub_CC11D6的返回值(emmm,写到这才发现这个函数上面也出现过,做题的时候真没发现)

知道CC11BD函数判断长度后,看一下sub_CC1721函数

IDA双击进去,用OD调试一下,获取一下CC1456的返回值也就是v8的值是新复制内存的地址,而CC1375的返回值V7是新复制内存结尾的地址。
然后while循环用首地址V8进行运算,每次给首地址V8+1,直到他等于尾地址V7 。程序知道数组循环完了就退出了。

具体的运算就是*v8异或了v6,而v6是由for循环累加得到的。
for循环的条件就是*i小于*v8,也就是让*i小于输入字符的ASCII码值

*i的值先返回OD查看CC1325的返回值
通过记录得到2,3,5,7,11,…猜测是质数
然后回到IDA,查看CC1325函数没发现东西,看参数v9来自函数CC16E0
进入CC16E0函数

小于a2也就是小于128,然后进CC1672函数发现了质数的代码


所以加密函数内的逻辑就差不多为,
将比输入字符ASCII码小的质数加起来,然后与输入字符进行异或,得到一个int类型数组

然后去看判断是否成功的函数

这些函数都可以通过OD调试得到返回值,根据返回值可以判断是啥,,,
然后CC1325经过调试,每次的返回值就是v9数组

可以得到判断函数就是判断,加密后的数组是否等于v9数组

写脚本得到flag

#include <iostream>using namespace std;int zhishu(int num)
{for (int i = 2; i < num; i++){if (!(num % i))return 0;}return 1;
}
int jm(int num)
{int sum = 0;for (int i = 2; i < num; i++)if (zhishu(i))sum += i;return sum ^ num;
}int main()
{const int data[16] = { 438,1176,1089,377,377,1600,924,377,1610,924,637,639,376,566,836,830 };string flag = "";for (int i = 0; i < 16; i++){for (int j = 0; j < 128; j++)if (jm(j) == data[i])flag += (char)j;}cout << "flag{" << flag << "}" << endl;
}

得到最终flag为flag{Che11y_1s_EG0IST}

re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity相关推荐

  1. Linux下汇编语言学习笔记65 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  2. 通信原理学习笔记6-5:数字解调——译码的硬判决与软判决

    卷积码的Viterbi译码.LDPC的译码,都有两种方式:硬判决(hard decision)与软判决(soft decision) 硬判决 硬判决就是将信号波形与判决门限比较,数字解调器的输出(即后 ...

  3. HDLBits学习笔记(61~65)

    HDLBits学习笔记(61~65) 学习阶段:有问题发873727286@qq.com大家一起讨论. 题目61 Mux2to1 题干:Create a one-bit wide, 2-to-1 mu ...

  4. BUUCTF-Crypto学习笔记(四)

    这是第四篇的BUUCTF-Crypto学习笔记,希望能坚持下去 一.[BJDCTF 2nd]Y1nglish-y1ng 打开页面得到下面信息,且下载文件后得到内容如下: #题目原文 Y1ng根据Eng ...

  5. JavaWeb学习笔记(十)--HttpServletRequest

    1. HttpServletRequest简介 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中 2. Ht ...

  6. ArcGIS JS 学习笔记4 实现地图联动

    原文:ArcGIS JS 学习笔记4 实现地图联动 1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而 ...

  7. SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引

    SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn  ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 9894  Solved: 4561 [Su ...

  9. Linux第二周学习笔记(11)

    Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...

  10. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

最新文章

  1. 如此精心整理的深度学习资源只在这里,值得你拥有!(上篇)
  2. 华为为什么要“囤”700名数学家?中科院院士告诉你!
  3. arcgis select by attributes一次选多个_地理工具学习--arcgis篇:单工具学习(2)
  4. SQL Server 2012安装图解
  5. Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)
  6. java io 模型_五种 IO 模型
  7. 【数据结构和算法】拓扑排序(附leetcode题 207/210 课程表)
  8. 每天一道剑指offer-丑数
  9. Linux卸载Apache服务器
  10. C语言-简介及IDE介绍
  11. 令牌环访问控制的原理_通过Keycloak进行访问控制的级别,第1部分:令牌认证
  12. linux系统ca证书认证失败修复过程记录
  13. 如何查看服务器登录日志文件,服务器登录日志查看
  14. treefrog之视图 ERB
  15. 股票的最新和历史股息收益率查询(1)
  16. 目标规划之问题数学化(建模)
  17. 网易有数海量任务调度和智能运维实践(整理)
  18. java机顶盒_Java技术在数字电视机顶盒中的应用
  19. 微博--图片,视频,评论抓取
  20. 中国发布域名系统基础软件 “红枫”

热门文章

  1. 叉乘点乘混合运算公式_职测解题技巧:数学运算的35个基础公式
  2. 车牌识别停车场智能管理系统
  3. CVPR2020(Enhancement):论文解读《Zero-Reference Deep Curve Estimation for Low-Light Image Enhancement》
  4. HTML5期末大作业:动漫电网站设计——动漫电影《你的名字》(7页) HTML+CSS大作业: 动漫电网页制作作业_动漫电网页设计...
  5. 做sxy官网的一点经验
  6. 2016年年度总结 金鸡纳福 岁月奔跑
  7. 含论文基于JAVA户籍信息管理系统【数据库设计、论文、源码、开题报告】
  8. C# Bitmap引用System.Drawing报错 “...不存在类型命名空间名...”的修复
  9. 七日杀服务器怎么设置家的位置,七日杀固定地图在哪儿建家好 | 手游网游页游攻略大全...
  10. 23 Pictures That Prove Society Is Doomed