go语言函数堆栈

运行程序,这题输入的格式为flag{xxxxx},两种方式:一种输入做加密与固定值比,一种固定值加密与输入比,这题是后者
遇到go语言先file一下,发现去符号了
ida golang helper后
先搜字符串,没有什么发现,说明关键字符串被加密了,看imports,也没有什么发现
分析main_main函数

大致流程

输入后对某变量base64,程序结尾的==和memcmp,而且每个分支都有print函数,猜测这里为关键点进行分析,整理伪代码如下

__int64 __fastcall main_main(__int64 a1, __int64 a2)
{__int64 v2; // r8__int64 v3; // r9__int64 v4; // r8__int64 v5; // r9__int64 v6; // rdx__int64 v7; // rcx__int64 v8; // r8__int64 v9; // r9__int64 v10; // rdxint v11; // er8__int64 v12; // r8__int64 v13; // r9__int64 v14; // r8__int64 v15; // r9const __m128i *v16; // rdxunsigned __int64 v17; // rbx__int64 result; // rax__int64 v19; // rdx__int64 v20; // r8__int64 v21; // r9__int128 v22; // [rsp+0h] [rbp-100h]__int128 v23; // [rsp+0h] [rbp-100h]__int64 *v24; // [rsp+8h] [rbp-F8h]__int128 v25; // [rsp+10h] [rbp-F0h]__int64 v26; // [rsp+10h] [rbp-F0h]__int64 v27; // [rsp+18h] [rbp-E8h]char v28; // [rsp+18h] [rbp-E8h]char v29; // [rsp+18h] [rbp-E8h]__int64 v30; // [rsp+20h] [rbp-E0h]__int64 v31; // [rsp+28h] [rbp-D8h]__int64 v32; // [rsp+30h] [rbp-D0h]char v33; // [rsp+58h] [rbp-A8h]char v34; // [rsp+80h] [rbp-80h]const __m128i *v35; // [rsp+98h] [rbp-68h]__int64 *v36; // [rsp+A0h] [rbp-60h]__int128 v37; // [rsp+A8h] [rbp-58h]__int128 v38; // [rsp+B8h] [rbp-48h]__int128 v39; // [rsp+C8h] [rbp-38h]__int128 v40; // [rsp+D8h] [rbp-28h]__int128 v41; // [rsp+E8h] [rbp-18h]if ( (unsigned __int64)&v34 <= *(_QWORD *)(__readfsqword(0xFFFFFFF8) + 16) )runtime_morestack_noctxt(a1, a2);runtime_newobject(a1, a2);v36 = v24;*(_QWORD *)&v41 = &unk_4A6D00;*((_QWORD *)&v41 + 1) = &off_4E1130;fmt_Fprintln(a1, a2, (__int64)&v41, (__int64)&unk_4A6D00, v2, v3, (__int64)&off_4E28A0, qword_572B18);*(_QWORD *)&v40 = &unk_4A3E80;*((_QWORD *)&v40 + 1) = v36;*(_QWORD *)&v22 = &off_4E2880;*((_QWORD *)&v22 + 1) = qword_572B10;*(_QWORD *)&v25 = &unk_4C8569;*((_QWORD *)&v25 + 1) = 2LL;fmt_Fscanf(a1, a2, (unsigned __int64)&off_4E2880, (__int64)&v40, v4, v5, v22, v25, (unsigned __int64)&v40, 1LL, 1LL);runtime_stringtoslicebyte(a1, a2, v6, v7, v8, v9);v10 = v27;*(_QWORD *)&v23 = &v33;*((_QWORD *)&v23 + 1) = v27;v28 = v31;runtime_slicebytetostring(a1, a2, v10, v31, v11, v23);encoding_base64__ptr_Encoding_DecodeString(a1, a2, v31, v30, v12, v13, qword_572B00, v30, v31);v16 = (const __m128i *)v31;v17 = v30;if ( v32 ){v35 = (const __m128i *)v31;(*(void (__fastcall **)(__int64))(v32 + 24))(a1);runtime_convTstring(a1, a2, v19);*(_QWORD *)&v39 = &unk_4A6D00;*((_QWORD *)&v39 + 1) = v26;v28 = 1;fmt_Fprintln(a1, a2, (__int64)&off_4E28A0, (__int64)&unk_4A6D00, v20, v21, (__int64)&off_4E28A0, qword_572B18);v16 = v35;v17 = v30;}if ( v36[1] == v17&& (runtime_memequal(a1, a2, (__int64)v16, *v36, v14, v15, v16, (const __m128i *)*v36, v17, v28), v29) ){*(_QWORD *)&v38 = &unk_4A6D00;*((_QWORD *)&v38 + 1) = &off_4E1140;result = fmt_Fprintln(a1, a2, (__int64)v16, (__int64)&off_4E28A0, v14, v15, (__int64)&off_4E28A0, qword_572B18);}else{*(_QWORD *)&v37 = &unk_4A6D00;*((_QWORD *)&v37 + 1) = &off_4E1150;result = fmt_Fprintln(a1, a2, (__int64)v16, (__int64)&off_4E28A0, v14, v15, (__int64)&off_4E28A0, qword_572B18);}return result;
}

静态分析

由储备知识盲猜 (__int64)&off_4E2880是输入存储的地址, (__int64)&v40是输入的长度,剩下的不太好分析,那么就动态分析

动态分析

输入123456789abcdefg 0x10个数
想找输入存的位置,但不好找,写了个脚本想在栈里找输入,失败了,在debug段里找输入,成功了,第一次用debug段,留个坑
调试发现debug,stack,vvar,vdso,vsyscall段在调试后出现的

#debug002段开始地址
begin = 0xC000000000
end = 0xC000200000
x = end-begin
for i in range(1,x-1):addr = begin+iif(Byte(addr-1) == 0x39 and Byte(addr) == 0x61 and Byte(addr+1) == 0x62 and Byte(addr+2) == 0x63 and Byte(addr+3) == 0x64 and Byte(addr+4) == 0x65 and Byte(addr+5) == 0x66):print(hex(addr))

注意到flag{92094daf-33c9-431e-a85a-8bfbd5df98ad}也是在debug段

flag{92094daf-33c9-431e-a85a-8bfbd5df98ad}

研究一下debug段

经过几次调试,debug段存储的应该是在动态调试中所有新出现的信息
比较有意思的几个点:

  • 在main刚开始时debug段里是没有flag{92094daf-33c9-431e-a85a-8bfbd5df98ad},在stringtoslicebyte后debug段里就出现了flag{92094daf-33c9-431e-a85a-8bfbd5df98ad},说明这个函数与flag有关
  • 在最后调用printf打印回显信息前,debug段没有Congratulation,调用后就有了

以后做题过程中,可以考虑一下debug段的信息

国赛2019逆向 easyGo lebel:golang / debug段的用处相关推荐

  1. 中关村2019逆向 Reverse lebel:控制流平坦化 / python字节码分析

    flat 题目名字,流程图都指向了控制流平坦化 通过阅读 https://blog.csdn.net/yangbostar/article/details/6204724 了解了 顺序流/条件流/循环 ...

  2. 2019数学建模国赛C题

    2019数学建模国赛C 运用模拟仿真的思想 附录1 在一定时间段内出租车在市区的平均空载率 zhs02.m clear; clc; data=xlsread('C:\Users\limaoli\Des ...

  3. 2019第十届蓝桥杯A组决赛(国赛)A题(三升序列)

    2019第十届蓝桥杯A组决赛(国赛)A题(三升序列) 输入: VLPWJVVNNZSWFGHSFRBCOIJTPYNEURPIGKQGPSXUGNELGRVZAG SDLLOVGRTWEYZKKXNK ...

  4. 2019年数学建模国赛(国一)经历总结

    11月2号下午,百无聊赖的笔者忽然刷到一篇微信推送"2019年数模国赛获奖名单公示",心里一紧,屏住呼吸点进去看,没想到居然在一等奖名单里发现了熟悉的名字,心中一阵狂喜.然后深深吸 ...

  5. 2019年 网络空间安全国赛真题 赛题分析

    2019年全国职业院校技能大赛中职组 "网络空间安全"赛卷八 没有错,国赛用的就是赛卷八 一.竞赛阶段 题目与实际环境差别还是蛮大的,可以说给你题目,没有环境你也不会做滴 PC机环 ...

  6. 中国高校计算机大赛网络技术挑战赛,2019年度“中国高校计算机大赛-网络技术挑战赛”国赛圆满落幕...

    2019年9月15日,2019年度"中国高校计算机大赛-网络技术挑战赛"国赛在温州大学举行,并在当晚迎来盛大的颁奖典礼,历时半年的网络技术作品类竞赛至此圆满落幕. 中国高校计算机大 ...

  7. 2019年国赛高教杯数学建模E题薄利多销分析解题全过程文档及程序

    2019年国赛高教杯数学建模 E题 薄利多销分析 原题再现   "薄利多销"是通过降低单位商品的利润来增加销售数量,从而使商家获得更多盈利的一种扩大销售的策略.对于需求富有弹性的商 ...

  8. 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解

    网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Linux部 ...

  9. 2019 蓝桥杯 C/C++实现 B组国赛

    2019 蓝桥杯 C/C++实现 B组国赛 题目列表 A:平方序列 B:质数拆分 C:拼接 D:求值 E:路径计数 F:最优包含 G:排列数 H:解谜游戏 I:第八大奇迹 J:燃烧权杖 A:平方序列 ...

最新文章

  1. 什么是CNN卷积神经网络的感受野及动画演示
  2. Nature:光解水催化剂效率接近100%!马斯克移民火星的能源和氧气这下有了
  3. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析
  4. WCF热带鱼书学习手记 - Service Contract Overload
  5. VTK:IO之HDRReader
  6. 10个 DIV+CSS 需要注意的问题
  7. CDH预警配置QQ邮箱
  8. 正则表达式学习笔记,电话号码、电子邮件、汉字、数字、字母的筛选
  9. 面向普通人的 PHP 加密
  10. MATLAB在运筹学背包问题的应用,运筹学论文之二维背包问题.docx
  11. 得物:两款问题商品系标识标注方式不符合最新规定 已先行下架商品
  12. 提取数据_EasyStat如何提取数据+个性化出图
  13. PHP 还有未来么,还是 25 岁就“寿终正寝”了?
  14. idea自动整理代码快捷键_MDK进阶使用教程,快捷启动任意软件,自动整理格式化代码,方便代码整理可以很好 的提高效率...
  15. c语言有结构体的200行代码,C语言——结构体(示例代码)
  16. 机器学习知识体系 (强烈推荐)
  17. fd 句柄_FD_CLOEXEC用法及原因-文件句柄
  18. 近世代数-群论基础二
  19. 【史上最全的PLC源码】2978个PLC应用例程合集
  20. 如何选择产品关键词?

热门文章

  1. Quake3安装出现问题解决:Required data files are missing.
  2. Nature综述: 关键物种对于微生物菌群结构和功能的驱动作用
  3. Nginx 相关问题(持续更新一:Cookie问题)
  4. linux7 设置隐藏账号,科学网-CentOS 7 在登录界面用户列表中隐藏指定账号-乔磊的博文...
  5. 【小程序】第一个小程序——创建小程序项目
  6. android蓝牙4.0控制器,DFRobot Bluno控制器 蓝牙4.0 开发板 Arduino 安卓 IOS开发平台
  7. PyhontPygame 飞船大战外星人 完整代码及资源下载
  8. 窃听神技:使用智能手机收听通过笔记本电脑键盘输入的内容
  9. mongoDB地理位置检索
  10. iOS In-App Purchase 内购之创建内购产品