在某黑哥的指示下给他加紧出两个题目~

最先想到的就是34c3ctf时做过的SMC题目,那个随机数混杂着自解密真的是让我久久无法忘怀

SMC题目的核心就在于自解密时的key
如果key不提供,那么考点就在于大量x86汇编中一般\x00出现的是最多的
而这需要基于一定量的代码之上才能猜出,而且这种题目相对而言可玩的花招要少很多

于是选择了将key由一个.init_array中的函数动态生成

下一步是自解密代码如何加密放在程序中
由于我们只能写出解密代码(编译前的高级语言),因此有两种方法
一种是先写好代码,编译后令程序将其加密,然后作为data输出字节码,最后将字节码保存在目标程序中
第二种是直接写目标程序,将需要加密的代码段通过Patch来重写。这一点作为逆向选手来说,IDC/IDAPYTHON脚本的Patch是驾轻就熟了,所以我选择了后者

Patch的时候想起来IDC对数组的支持非常反人类,明明语法类C,却不具备数组功能,查了一下据说需要使用Array函数来创建,试了一下也没成功,直接换IDAPython
只要记住API,IDAPython好用多了嘛XD

脚本:

def patch(start, end, key):n = 0while(start + n!=end+1):addr = start + nPatchByte(addr, Byte(addr)^key[n%len(key)]n += 1print("%d Byte has been changed" % n-1)

搞好以后运行疯狂报SIGABRT
动调以后发现是.text段不具备写权限
同样的,如果使用第一种方法,那么.data段解密完成以后是不具备执行权限的

因此需要使用mprotect来修改页属性

理论上来说,应该可以直接修改section的属性,但是我用010Editor查看的时候并对不上号,不知道问题出在哪里..

而mprotect操作的单位必须是页,第一个参数必须指向页起始地址。
最坑的是这些系统函数执行失败并不会报异常,而是返回-1,并设定perror的值

纠结许久以后找到一个示例

  long pageSize = sysconf(_SC_PAGESIZE);void *pageStart = (void*)((long)p - (long)p % pageSize);

其中p是目标地址(的指针)

然后通过mprotect(pageStart, pageSize, PROT_WRITE|PROT_EXEC)即可设置可写可执行属性了

180728 逆向-SMC出题笔记相关推荐

  1. 【UNCTF】逆向WriteUp以及出题笔记

    [UNCTF]逆向WriteUp以及出题笔记 WriteUp re_checkin 反编译 babypy easyMaze ICU ezRust base_on_rust Trap ezre ezvm ...

  2. 滴水逆向win32学习笔记1

    滴水逆向win32学习笔记 一.字符编码 基本介绍 关于utf-16.utf-8和unicode的关系 BOM头 二.宽字符 基本介绍 常用函数 三.Win32 API中的宽字符 什么是win32 A ...

  3. 逆向QBasic7.1笔记

    一.前言 最近接触了一个QBasic编写的16位程序的逆向,该程序是运行在纯DOS环境下,虽然此环境已离我们远去,能接触到的机会不是太多,但为了防止有意外碰到的同学像我最开始那样走弯路,特此将该笔记整 ...

  4. OD逆向调试程序的笔记

    1-读取文本框内容常用的函数(这里的"A"表示ASCII,"W"表示宽字符UNICODE,下同)   -GetDlgItemTextA()<这个函数是最常 ...

  5. 滴水逆向3期笔记与作业——01汇编

    防止OneNote丢失. 海哥牛逼. 01汇编笔记 01进制 进制定义 10-2进制转换 八进制 02数据宽度/逻辑运算 数据宽度与存储 逻辑运算 计算机做加法的本质 作业 03通用寄存器_内存读写 ...

  6. 静态链接库,动态链接库【滴水逆向三期48笔记】

    在开发过程中,我们通常会有很多函数,需要多次使用或在不同的程序中使用该函数,也有可能我们会将我们写好的函数给别人使用,但是我们又不想给他源代码,毕竟代码是我们花了很多功夫写出来的,那么我们如何不发给其 ...

  7. [SCUCTF2022]校赛Web出题笔记

    前言 本次校赛我出了两个题,一个签到一个中等,由于自己的原因导致这两道题都出现了比较离谱的非预期,这里给师傅们谢罪了. checkin <?php error_reporting(0);$act ...

  8. IAT表入门简析【滴水逆向三期52笔记】

    在讲IAT表之前,我们来回忆一下之前学习的知识: 如果我们将函数写在程序的源文件中,那么该函数就会被编译器直接编译到程序的二进制文件中,在程序调用该函数的时候,E8后跟的地址是直接写死的,程序直接在e ...

  9. 导入表解析,IAT表解析【滴水逆向三期53笔记】

    我们再上一章节简要介绍了IAT表,我们知道如果程序调用dll中的函数时,必须通过IAT表来找到函数,我们基本了解了IAT表之后,我们今天来讲解一下导入表,通过本章节的学习,我们可以了解导入表,也能对I ...

最新文章

  1. html5语义化标签大全
  2. 基于FPGA的gardner同步环设计
  3. The Windows Subsystem for Linux optional component is not enabled. Please enable it and try again.
  4. 求职受性别限制?数据指明2021女性求职新方向
  5. PURE DORM IS GREAT
  6. [转载] 杜拉拉升职记——07 管理者关心细节吗?
  7. java中的%nf_java中DecimalFormat四舍五入用法详解
  8. linux5 vnc,CentOS 5 下安装配置VNC
  9. Atitit 动态按钮图片背景颜色与文字组合解决方案
  10. python 写文件 换行_python中写入txt文件需要换行,以及\r 和\n
  11. ApacheCN Python 译文集 20211108 更新
  12. 服务器 '' 上的 MSDTC 不可用。
  13. VBS好玩的整人小程序
  14. Win10新电脑里的设备和驱动器下如何分盘
  15. DiskGenius系统迁移(更换硬盘系统对拷)
  16. 台式计算机硬件组装步骤,【电脑组装教程】DIY台式电脑新手组装+安装系统多图全教程...
  17. 又是一年金九银十!一起看看这些大厂面试真题查漏补缺吧,程序员翻身之路
  18. Linux开启root用户
  19. Bable的简单使用
  20. Ocata Neutron代码分析(六)——APIRouter的初始化(1)加载core plugin和service plugin...

热门文章

  1. 国际象棋指导:基本规则和策略
  2. vscode实用快捷键_VS Code常用快捷键总结
  3. shell脚本之until
  4. Label设置行间距,段间距,字间距
  5. Echart常用折线图
  6. 韩顺平30天javaQQ通信作业扩展-完成离线提醒及接收接收
  7. Three.js初探之微信小游戏---第一篇
  8. Bootstrap5学习笔记
  9. 密歇根大学,一个被低估的美国公立常春藤名校
  10. 用python实现数字图片识别神经网络--启动网络的自我训练流程,展示网络数字图片识别效果