羊城杯re总结
@TOC这次的羊城杯出的题挺好的,对于我的学习还是有很大的帮助,赛后也是把6个题都复现了一遍,除了oddcode留下了一个问题外,其他的都跟着过了一遍,这里不写wp了,简单复述一下,并记录学到的知识点
smc这个题虽然说做出来了,但是用的时间比较长,smc不算是难点,但是我在对于base64的算法分析上花费了点时间,被程序那么长的代码误解了
deltx这个就是个数学题,用自己的指令实现了乘法和减法,静态分析会比较困难,通过构造简单的输入,动调后,就可以知道程序在干什么
android我不是很会做安卓,没学过java,jeb的调试和hook当时也没搞出来(后面再去学习)这个题还算是比较简单,就用jeb硬分析就行,多看看java代码就熟悉了
Babyvm典型的vm题,我做这种题做的少,不过套路都是一样的,对着代码一个一个字节的过,还是比较考研耐心的,下次比赛出了多尝试尝试
SafeBox这个题之前在mrctf的时候见过一次,这次又出现了,一模一样,调试器代码里有smc,用idaoython还原代码,之后分析就行,主要的是学习了这个双进程保护,我对着文档还是过了一遍,收获还挺大(api多)
...
羊城杯&网刃杯 re wp
@TOC
ResmcSmc动调即可,找到加密函数,恢复栈帧,即可看到加密函数,变异的base64
12345678910111213141516171819202122232425262728293031323334353637#include<stdio.h>#include<string.h>unsigned char a[100]={"H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4"};unsigned char s[100]={ 0xE4, 0xC4, 0xE7, 0xC7, 0xE6, 0xC6, 0xE1, 0xC1, 0xE0, 0xC0, 0xE3, 0xC3, 0xE2, 0xC2, 0xED, 0xCD, 0xEC, 0xCC, 0xEF, 0xCF, 0xEE, 0xCE, 0xE9, 0xC9, 0xE8, 0xC8, 0xEB, 0xCB, 0xEA, 0xCA, 0xF5, 0xD5, ...
学习《加密与解密》中密码部分遗留的问题
@TOC
前言 最近在看加密与解密的密码章节的时候,暴露出了自己以前遗留的密码学问题,再加上平常ctf中,涉及密码部分的题很多,就下定决心好好的把自己不会的恶补一下。于是,我就硬着头皮好好的去学习,学完发现,自己头皮还真硬
遗留问题
crc32定义数据通信领域中最常用的一种差错校验码
原理
例子
疑问上面这些就是crc算法的原理,还是很好理解的,下面的内容才是我头皮硬的内容通过学习 我又出现了以下的疑问1什么是查表法 如何实现2 crc的几个组成部分(多项式公式、多项式简记式、数据宽度、初始值、结果异或值、输入值反转、输出值反转、参数模型)怎么参与运算
解决第一个问题:在了解查表法之前,先学会直接计算法是如何在代码中实现的
这其中的核心原理就是利用了xor的交换律,使数据处理起来更加方便
123456789101112131415161718192021222324252627Const PLAY = &H1021& '这里生成项(实际上就是CRC-CCITT),注意这里默认首位1是去掉的Const TEXT = "123456789 ...
2021祥云杯 re wp
@TOC
Rev_Dizzy这个题是比赛里最简单的一道题,也是我唯一做出来的题(菜),本来开始想着用angr能直接跑出来,后来怎么也调试不好,所以就用了笨办法,结果一下就出来了。。
用ida打开后,可以在主函数明显看到逻辑输入32位的字符,通过4000多行加密,最后与已知的字符串比较
题目很简单,只需要把4000多行加密代码逆序就行,异或不变,加变成减,减变成加,用已知字符串作为输入,就可以解密此过程(代码不贴了,太长了)
勒索病毒比赛时这个题做出来的人也挺多,当时脑子尽想这从rsa下手,误了自己同时这个也使用了好多crypto api,查资料查的脑子疼
前面这段我猜时获取路径和文件信息,没有什么用这块用了这个api进行加密,然后释放这块就是核心加密的部分,大概就是,把sub_b77290里的字符串md5加密,再和时间戳混合起来(里面有移位操作)作为密钥,把密钥进行sha256加密,作为aes的key这块获取pbData也可以通过调试的方式,拿到数据
这块唯一不确定的就是时间戳,我看了好多脚本用的是爆破的手法,其实看加密文件的属性,直接获取他的时间戳然后写脚本获取
1234567891 ...
VB程序NAG窗口方法-4C法
@[TOC]
最近在练习破解,学习了一种新方法,可以去掉VB程序的NAG窗口,觉得非常好玩,记录下来。
NAG窗口原程序启动有一个NAG窗口,若干秒后会自动关闭。NAG窗口就是为了让用户注册软件经常出现的注册窗口或者软件启动时出现的注册窗口.
去除1用od载入 VB程序有个特点-入口点处都是一个PUSH指令,然后一个CALL指令2 把push后面的数据加上0x4c0x004067d4+0x4c=0x00406820在数据窗口跟随3取dword大小的值 即00406868 再次在数据窗口上跟随4发现两个大小为0x50的数据块每块数据的第三行第五个数据是指定了每块代码(也就是程序启动后要加载的窗体)出现的顺序,我们交换他们的值,就可以去除NAG窗口
作用 好像没啥卵用
DASCTF July X CBCTF 4th re wp
@TOC这两个题在当时都没有做出来
shellcode一看到附件是很多文件的题我就头大,包括上次那个省赛四叶草的内核题,无从下手,这次,我由于对web知识缺乏,没有一眼看出来part1是一个服务器,导致很多时间浪费在这上面,再加上这还是个go的服务器…..碰巧那天ida7.6的服务器还坏了
第一个难关:识别part1是一个golang的服务器主要的代码还是在part3上,当时我也逆了这个,没有想到他把检测flag的逻辑放在了返回函数上,,我这也太粗心了吧,啥函数都看了,既然没有注意到这个艹原封不动的rc4,key也给了,密文也给了…
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include <inttypes.h>3 #include <stdio.h>4 #include <string.h>56uint8_t f[]={0x64, 0x2e, 0x90, 0x34, 0x41, ...
读书笔记
18c641843e597c01c3cc995e4a8f3faa45d74213973003601b95f4787652c73ceb8963fb887d8de50c680e28d60b0bf3830563f1a471314ed24cbe5b5525c08f719368ac22ccdbb12223fb6a5e55e7d9993c0dee4076c699accf22f6d6282d46e2b77890b49757ab1792c05940c56efa6ac8ccc2f9d3a7e397fd9cd16afe1cc0f6eedd69b7d138617d4400b21b18e7aa5b8caf661b723a2b6d98d45cb9156dc91a2aa574959bb7a7cd5072595a81bf358af3d6c18e7f2a1d7efadec24ed877829bd25365079eb137fc9e9d4e54ac5ba9b080d629bae431df408b43bbda7c0d4e9701c07e97d9f3336df63a449f04d6eabd89e4951ba85fdd3 ...
内嵌汇编练习
@[TOC]
定义通俗点来讲,内嵌补丁就是把我们写好的补丁代码镶嵌在原有的代码里。举个例子,假设这里有一个代码,随机的控制骰子的点数,现在要求我们不管什么时候,最后运行完骰子后点数都为6,我们该怎么办呢,由于不清楚代码里到底写了什么,是否有加密,所以我们不能随意的修改代码,而这里,我们采用内嵌补丁技术,只要在代码的末尾跳到我们的我们的补丁上,再写一句代码,让骰子的点数为6,再跳回去即可。
练习(Patchme)文件例子:https://pan.baidu.com/s/1j_LJ72KWmUtnGpp70r0weA5ze1(百度网盘)
要求要求更改显示的字符串
提示1修改字符串,最简单的就是用od查找字符串,直接修改(不过和我们用的内嵌补丁无关)这里如果修改字符串后,触碰到一些算法,那么就可能让代码流程发生变化,这也体现出内嵌补丁的优点2如果代码有加密操作,类似upx这种,那么我们可能无法搜索到相关的字符串
分析1按照上述方法我们可以先试着搜索字符串,果然没有
分析2搞懂代码流程(遇见函数f7进去分析)
1进入401001加密代码2第一个解密循环4010a3:对b区域异或44 (加密的字 ...
游玩日记
18c641843e597c01c3cc995e4a8f3faaa102222f17c15fe2fa2485624b0417bd366789bd11c54a4e2ddf75c9db0834047e0f10d2705ea751d1eac0c66d6d6263a2e062322edd196b14607d0c51b7a6d0721907b7e18ab965f43cedd98cc858e032d2b4e32a5933a95e048598a5ea865b962f00a59a9eea174f6ceb3e2910f1de3d1418ae9e0a1d2628b1512f26c41650a37e23d47694fc6ea17b7744d268a7fc92751052f5c7bcbe67d15a1a9d8e836db34b335847e350568715fc029b110615ae90f8310d3384f3194c59813861e2b6c3dcb60f074abcc19ea79345cc70ee7c8bbc6462f12cbb7efb5efe279aed2057bc7e807313ce51e51 ...
一次unicorn的学习
@TOC
起因自己在打MTCTF 2021 100mazes的比赛时,第一次接触到这种大量代码结构相似,却无法使用idapython自动化完成题目,无奈只能手动导出地图,一个一个的解密迷宫,这消耗了大量的时间,最终我在第十关放弃了作答并期待学习像这种结构大量相似的题该如何去做,最后在观看wjh的博客时,发现了他又用unicorn解决了此题目,我参照式的记录了此篇文章,鼓励自己学习更多的关于unicorn的知识。
什么是unicornUnicorn是一个轻量级, 多平台, 多架构的CPU模拟器框架,我们可以更好地关注CPU操作, 而忽略机器设备的差异.缺点:无法模拟整个程序或系统, 也不支持系统调用. 你需要手动映射内存并写入数据进去, 随后你才能从指定地址开始模拟.用处:使用unicorn可以在比赛中解决大量相似功能模块的题目,完成自动化操作
使用方法导入模块123from unicorn import *from unicorn.x86_const import *uc = Uc(UC_ARCH_X86, UC_MODE_64)
寄存器读写1234567891011121314151 ...