无题
DASCTF May出题人挑战赛WER (windows error reporting)机制
一上来看见这么多参数,我以为是ECC算法,找了半天的解法。。
结果这题并不是
这里运用了一个WER的机制
即是WER机制调用指定设置恢复回调。
而在ida 引入了RegisterApplicationRecoveryCallback函数
一个恢复回调函数
在程序引发错误的时候从这个函数这里开始
对这个函数进行交叉引用
此处有一个messagebox 内容为correct
推断此处即为flag加密点
简单的小异或
算出来flag
12345flag=''data=[0x05, 0x03, 0x55, 0x05, 0x04, 0x07, 0x5E, 0x54, 0x05, 0x07, 0x50, 0x02, 0x03, 0x53, 0x5F, 0x50, 0x53, 0x50, 0x53, 0x05, 0x55, 0x00, 0x54, 0x55, 0x57, 0x03, 0x05, 0x02, 0x52, 0x50, 0x51, 0x53]for i in data: ...
无题
Heroctf v4MVBN(llvm 反汇编学习)是一种没见过的汇编类型
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145; ModuleID = 'source.c'source_filename = "source.c"target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64 ...
Re2
#Re2
https://blog.csdn.net/alidada_blog/article/details/81290323
修复之后,发现这里有个永真
进入二进制界面批量删改
重编译之后,稍微修修
得到正常界面
在进入程序启动之前,会在初始化中跳转指制定的初始化进程
也就是一个反调试的窗口,这里可以通过反调试的窗口内容交叉检索出来
对其跳转条件进行修改就可以绕过。同时在进入主函数之后,也就是图中的位置也有个反调试,可以通过nop掉跳转或者是值的更改来绕过
flag1的加密方式,略微抽象的位运算,这几天一直没啥状态,没写出来
本质上是一个dword数组不断交换然后加密,首位是不变的。
写个脚本
12345678910111213141516key=[0x6C637953, 0x76656C6F, 0xD754C061, 0x023BA78B, 0xEBFD7C45, 0x60CBC8EF, 0x9CA6A4BC, 0x6BE85ECF, 0xE84E5C76, 0x07812C36]flag1=[0]*8flag1[0]=key[0]flag=''for ...
normal系列
normal32(普通的动调和流程判断)多次敲击f5有惊喜
应该是第一次解析不完整
毕竟原汇编不止这么一点
异或和密钥
进入加密,这里先生成一个Data数组
此处的v26[25]就是之前的Data,v24+v25-4就是存放加密后的数据的位置
用xor 过的数据和data异或
得出结果
写脚本
123456789101112131415import structkey1=[0xCA3E0C86, 0x19AED798, 0xA66B77E2, 0xB077A16A, 0x05379169, 0x307BF97A, 0x104B5A43, 0x28D47D86]key='SWPU_2019_CTF'data=[0xF80F37B3, 0x5DAEBCBC, 0x864D5ABA, 0xD3629744, 0x1624BA4F, 0x1A729F0B, 0x266D6865, 0x67C86BBA]temp=''flag=''for i in range(len(data)): data[i]^=key1[i]for a ...
normal系列
normal31(hook的学习,sm4算法)执行程序
弹出hooked显示,这里涉及hook程序。主要就是通过用户行为来跳转到指定程序
初探hook技术 - 先知社区 (aliyun.com)
检索字符串,检查弹窗信息来源,交叉检索
跳转
这里似乎是一个base64变表
AddVectoredExceptionHandler进入一个指向的程序
进入Hadnler
继续进入sub_B61172
找到sm4特征值
推测sub_B61172此处为sm4的key生成,以where_are_u_now?作为密钥生成轮密钥,对储存unk_B6A218的位置进行交叉检索
找到与shuru相关的sm4加密
在执行完密钥生成之后就会回到被hook的位置执行sm4加密,然后引发异常,SetUnhandledExceptionFilter函数,设置异常捕获函数,会在发生异常之后优先执行函数内的程序。
这里应该是再sm4加密之后设置了一个错误
然后执行一个换序和base64再变种我们先还原b64
这里面有个sub_B610FF,是对取6位的函数进行加24除模64的操作,可以理解为表的偏移(就 ...
normal系列
normal29 (unicorn的学习)pyc解个码
123456789101112131415161718192021222324252627282930313233343536373839404142#!/usr/bin/env python# visit https://tool.lu/pyc/ for more information# Version: Python 2.7from unicorn import *from unicorn import arm_const as acimport timedef Unicorn(input): bytescode = '\x08\xb0-\xe5\x04\xe0\x8d\xe5\x04\xb0\x8d\xe2\x10\xd0M\xe2\x10\x00\x0b\xe5\x14\x10\x0b\xe5\x000\xa0\xe3\x080\x0b\xe5\x000\xa0\xe3\x080\x0b\xe5\x1b\x00\x00\xea\x080\x1b\xe5\x010\x03\xe2\x00\x00S\xe3 ...
normal系列
normal28 (z3 进阶学习,向量异或,数值还原,yield使用)一道简单的py累加题目,
可以直接解出
也可以z3
分析题目
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#!/usr/bin/env python# visit https://tool.lu/pyc/ for more information# Version: Python 2.7import structimport timedef fun(start, end, s):#相当于生成key a = 32310901 b = 1729 c = s m = end - start #254 while True: d = int((a * c + b) % m) yield d c = dif __name__ == '__main__': arr = [77, 263, 394, 442, ...
normal系列
normal27 (累加)pyc文件,网站转py
并进行题目分析
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#!/usr/bin/env python# visit https://tool.lu/pyc/ for more information# Version: Python 2.7import structimport timedef b(a): return a & 0xFFFFFFFFFFFFFFFF #取16位def c(str): return struct.unpack('<Q', bytes(str,encoding='utf8'))[0]#小端,unsigned longlongdef d(a): for i in range(64): a = a * 2 if a > 0xFFFFFFFFFFFFFFFF: ...
normal系列
normal26(UnDecorateSymbolName 函数学习)无壳
查看main函数
密码长度31
丢串数据看看
跑一遍之后发现是输入换序之后存放到v5的空间里
输入一个顺序串找出被打乱的顺序
下面的outputstring
有个匹配,写个脚本
1234567891011s = '1234567890-=!@#$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;'s1 = '(_@4620!08!6_0*0442!@186%%0@3=66!!974*3234=&0^3&1@=&0908!6_0*&'s2= '55565653255552225565565555243466334653663544426565555525555222'output= ""for i in range(62): for j in range(32,127): a = j % 23 b = i ...
normal系列
normal25找到start函数
看这个标准的main函数格式,sub_4009C6 应该就是main函数
sub402080应该是init
sub 402110应该是final
进入main函数
一个异或,一个连续b64,解出来分别是
Info:The first four chars are flag
还有个看雪的网址
https://bbs.pediy.com/thread-254172.htm
说明flag不在这里,去init和final看一下
在final 的 off_6cbee0 里面发现可疑函数
byte6cc0a0储存了连串的数据,且异或v1为f,第四位为g
可以断定是flag
写脚本咯
12345678910encode=[0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B]key= ...