攻防世界 reverse 进阶 -gametime
19.gametime csaw-ctf-2016-quals
这是一个小游戏,挺有意思的
's'-->' ' 'x'-->'x' 'm'-->'m'
观察流程,发现检验函数在
1 char __usercall check_input_401507@<al>(int a1@<edx>, int a2@<ecx>, DWORD dwMilliseconds, int a4, int a5)
2 {
3 int v5; // esi
4 int v6; // ebx
5
6 v5 = a1;
7 v6 = a2;
8 print_401A73((int)"key is %s (%s)", a5, a4);
9 bks_401423();
10 print_401A73((int)"\r \r");
11 if ( v5 > 0 )
12 {
13 do
14 {
15 print_401A73((int)".");
16 Sleep(dwMilliseconds);
17 --v5;
18 }
19 while ( v5 );
20 }
21 if ( check_time_401260(v6, 500 * dwMilliseconds) )//关键
22 return 1;
23 print_401A73((int)"key is %s (%s)\r", a5, a4);
24 print_401A73((int)"UDDER FAILURE! http://imgur.com/4Ajx21P \n");
25 return 0;
26 }
检验工作交给了:401260()函数
1 bool __fastcall check_time_401260(int a1, int t)
2 {
3 int a1_2; // edi
4 int t_2; // esi
5 int input_c; // eax
6
7 a1_2 = a1;
8 t_2 = t;
9 if ( a1 == ' ' )
10 print_401A73((int)"s\n");
11 else
12 print_401A73((int)"%c\n", a1);
13 if ( t_2 )
14 {
15 while ( !_kbhit() )
16 {
17 if ( !--t_2 )
18 goto LABEL_7;
19 }
20 input_c = _getch(); // 输入
21 }
22 else
23 {
24 LABEL_7:
25 input_c = -1;
26 }
27 return input_c != -1 && input_c == a1_2; // 相应时间内输入,并判断是否正确
28 }
最简单的方法就是修改401260()函数的返回值,nop掉失败跳,ok
key is (no5c30416d6cf52638460377995c6a8cf5)
攻防世界 reverse 进阶 -gametime的更多相关文章
- 攻防世界 reverse 进阶 APK-逆向2
APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...
- 攻防世界 reverse 进阶 10 Reverse Box
攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...
- 攻防世界 reverse 进阶 9-re1-100
9.re1-100 1 if ( numRead ) 2 { 3 if ( childCheckDebugResult() ) 4 { 5 responseFalse(); 6 } 7 else if ...
- 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017
8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...
- 攻防世界 reverse 进阶 notsequence
notsequence RCTF-2015 关键就是两个check函数 1 signed int __cdecl check1_80486CD(int a1[]) 2 { 3 signed int ...
- 攻防世界 reverse 进阶 easyre-153
easyre-153 查壳: upx壳 脱壳: 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 int ...
- 攻防世界 reverse 进阶 16-zorropub
16.zorropub nullcon-hackim-2016 (linux平台以后整理) https://github.com/ctfs/write-ups-2016/tree/master/nu ...
- 攻防世界 reverse 进阶 15-Reversing-x64Elf-100
15.Reversing-x64Elf-100 这题非常简单, 1 signed __int64 __fastcall sub_4006FD(__int64 a1) 2 { 3 signed int ...
- 攻防世界 reverse 进阶 12 ReverseMe-120
程序流程很清晰 1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 unsigned int v3; // ...
随机推荐
- TypeScript Generics All In one
TypeScript Generics All In one TypeScript 泛型 代码逻辑复用 扩展性 设计模式 方法覆写, 直接覆盖 方法重载,参数个数或参数类型不同 test " ...
- vuex bug & vue computed setter
vuex bug & vue computed setter https://vuejs.org/v2/guide/computed.html#Computed-Setter [Vue war ...
- 「NGK每日快讯」12.15日NGK公链第42期官方快讯!
- vue学习遇到的问题
1.vue脚手架的安装,解决链接:https://www.cnblogs.com/qcq0703/p/14439467.html2.2.2.0+ 的版本里,当在组件上使用 v-for 时,key 现在 ...
- sql注入和union all关联查询的学习总结
1.后台从页面取值进行sql查询时最好不要直接拼,如下代码: String sql = "SELECT wo.* " + " from push_command pu & ...
- Java8 关于stream.foreach()和stream.peek()的区别解析
该思考来源于日常工作中,特记此心得. 思考:如何快速将list中的每个item内部属性值改变并进行其他流体操作呢? 下面做个测试:如何先在list中统一改变某属性的值,然后再根据某个属性取出该属性值最 ...
- OLAP分析
OLAP分析 1 视频教程 视频教程 如果对资源下载.分析操作有疑问,直接跟着视频做一遍即可. 2 数据集合说明 FoodMart,其为一家食品连锁店经营产生的数据存放的数据库,包括销售数据.库存数据 ...
- 第44天学习打卡(JUC 线程和进程 并发和并行 Lock锁 生产者和消费者问题 如何判断锁(8锁问题) 集合类不安全)
什么是JUC 1.java.util工具包 包 分类 业务:普通的线程代码 Thread Runnable 没有返回值.效率相比Callable相对较低 2.线程和进程 进程:一个程序.QQ.exe, ...
- .NET测试断言工具Shouldly
.NET测试断言工具Shouldly .NET测试 Shouldly在GitHub的开源地址:https://github.com/shouldly/shouldly Shouldly的官方文档:ht ...
- wxWidgets源码分析(2) - App主循环
目录 APP主循环 MainLoop 消息循环对象的创建 消息循环 消息派发 总结 APP主循环 MainLoop 前面的wxApp的启动代码可以看到,执行完成wxApp::OnInit()函数后,接 ...