avatar
文章
41
标签
8
分类
6
首页
归档
标签
分类
友链
huanghunr's Blog
搜索
首页
归档
标签
分类
友链

huanghunr's Blog

DOS程序逆向学习
发表于2025-03-13|Re学习
Dos常用命令参考 123456789101112131415161718dir #查看目录cd #切换目录d: #切换盘符到dmd #新建目录rmdir #删除目录rmdir /s #删除非空目录xcopy /e [source] [destination] #复制文件move [sourcr] [destination] #移动文件ren [oldname] [newname] #重命名type nul>[name].xxx #创建空文件echo [content]>[filename] #新建非空文件echo [content]>>[filname] #追加文件内容type [filename] #查看文件del [filename] #删除文件start /d "[path]"[exename] #启动程序explorer #打开文件管理器ipconfig #查看ip地址mount c [filepath] #挂载文件夹到c盘 编译并运行程序参考 1.下载Turboc2,并创建目录,用mount挂载 2.创建.c文件放到挂载...
2025TPCTF部分Re-wp+复现
发表于2025-03-09|WriteUp
linuxpdfpdf里运行Linux,010打开发现有一个base64解密函数,一些文件名以及文件对应的base64编码,通过正则匹配 ”文件名”: “文件内容“ 获取文件名和文件内容,直接用脚本导出。随便拿个文件看看信息,发现是zlib格式的压缩文件,用python的zlib库解压就行,查看解压出来有许多二进制文件,有一百多个有点不好看,于是寻找看是不是有elf可执行文件,写个函数遍历一下(脚本是AI写的)。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125import osimport reimp...
2025GHCTF Re-wp+复现
发表于2025-03-05|WriteUp
ASM?Signin!读汇编就行,可以用AI辅助。 要注意的是下面这里的数据 12345678910111213141516ENC PROC PUSH CX MOV SI,OFFSET BUFFER1 + 2 MOV DI,OFFSET DATA1 MOV CX,8LOOP2: MOV AX,WORD PTR[DI + 1] ;读取的是双字WORD,所以AX应该是di[2]和di[1]组成的2字节数据 XOR WORD PTR[SI],AX ;这里也是读取的si[1] 和si[0]的2字节数据 MOV AX,WORD PTR[DI + 2] ;di[2]和di[3]同上 XOR WORD PTR[SI + 2],AX ;si[2]和si[3]同上 ADD SI,4 ADD DI,4 LOOP LOOP2 POP CX RETENC ENDP 就一个异或加密,异或回来就行。 大概逻辑和解密脚本 123456789101112131415161718192021222324252627282930313...
2025TRXCTF Re-Wp+复现
发表于2025-02-22|WriteUp
sudo kurl https//spacewar游戏的逻辑是在一个25×25的区域内填写数字。 在play()函数中,首先会对我们的每次输入用isValid()进行检查。 isValid(),函数首先会初始化一个bool向量的表(存储0,1的数组),然后获取board中的值判断是不是0。如果不是0那么获取这个值作为下标获取bool向量中的值判断是不是1,如果是1返回0,如果不是1,把值修改为1。继续进行判断。其实就是判断broad中某一特定的位置的元素是否已经存在。它的检查顺序是,先检查行,再检查列,最后分5x5的块进行检查。 那么逻辑就是检查行,列,块中是否有重复的数字。如果没有返回1,有的话返回0; checkWin()检查了broad中是否有元素为0 ,如果没有0且isValid()检查也正确就赢得游戏。 很明显这就是一个数独游戏。查看broad的交叉引用就可以看到初始值在__static_initialization_and_destruction_0()中。拿下来用z3解。 解完后判断哪些值是要我们要输入的,用pwndbg把值输入,程序输出flag...
2025n1CTF Re-wp+复现
发表于2025-02-09|WriteUp
5mcvirtureprotect动态修改函数,用ida动态调试,给输入的数据下硬件断点运行分析就可以发现正确的逻辑。 但是不能反汇编,选中按c恢复成汇编代码。 直接读汇编写出加密代码,注意一下细节,每次循环左移的值都是不一样的,以防万一还是每次加密都细看了一下。一共有四种加密方法,四种加密循环进行一共十六次加密,顺序大概是box()–>index()–>shift(stat==0)–>shift(stat==1)–>……。直接写出逆向函数就行,密文就在比对的位置。 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111...
2025VNCTF Re-wp+复现
发表于2025-02-08|WriteUp
hook_fish运行应用提示输入一串字符并要求联网。 jadx分析,发现在main中,在点击按钮后会调用encrypt()方法对我们输入的数据加密,然后调用fish()方法下载了一个“hook_fish.dex”文件。通过下面的registerReceiver方法创注册了一个广播接收器,只要收到系统下载完成的广播时,就会调用onReceive()方法。 12registerReceiver(this.downloadCompleteReceiver, new IntentFilter("android.intent.action.DOWNLOAD_COMPLETE")); 在onReceive()方法中把加密后的的输入传入了MainActivity.this.loadClass();,加载下载来的.dex文件并反射调用了encode(input0);对输入再次加密,最后调用check()方法检查结果。然后删除本地的“hook_fish.dex”文件。 我们先hook file.delete()方法,在删除前转移出dex文件(脚本1); 在savedDexF...
IDA的一些用法笔记
发表于2025-01-21|工具
常用快捷键11、切换文本视图与图表视图 空格键 2、返回上一个操作地址 ESC 3、搜索地址和符号 G 4、对符号进行重命名 N 5、常规注释 冒号键 6、可重复注释 分号键 7、添加标签 Alt+M 8、查看标签 Ctrl+M 9、查看段的信息 Ctrl+S 10、查看交叉应用 X 11、查看伪代码 F5 12、搜索文本 Alt+T 13、搜索十六进 Alt+B 2a:将数据转换为字符串 f5:一键反汇编 esc:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口) shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置 ctrl+w:保存ida数据库 ctrl+s:选择某个数据段,直接进行跳转 ctrl+鼠标滚轮:能够调节流程视图的大小 r:把大数转为字符串 x:对着某个函数、变量按该快捷键,可以查看它的交叉引用 g:直接跳转到某个地址 n:更改变量的名称 y:更改变量的类型 / :在反编译后伪代码的界面中写下注释 \在反编译后伪代码的界面中隐藏/显...
Cython逆向初步学习
发表于2025-01-16|Re学习
我们只进行一些总结,基础理解我参考了这篇文章 Cython编写系统环境:windows,python编译器pycharm(python虚拟环境.venv),c/c++编译器visual stdio 2022 1.在python中安装cython和setuptools包建议给Cython单独开一个python虚拟环境,有时候包多了导入pyd会报错。 pycharm可以直接使用包管理器搜索安装。 12pip install cythonpip install setuptools 2.安装c\c++编译器我这里用的是visual stdio,也可以用MinGW。 3.编写cython拓展可以参考用户指南 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack 随意编写一个source.py作为拓展模块,代码如下 123456789def sayhello(): a = "hello world" print(a) cdef int add(int n,int m): return m+ndef aadd(n,...
python常用机器码助记符总结
发表于2025-01-07|工具
由于内容太多一下信息由AI辅助整理。 模块操作 IMPORT_NAME: 导入模块或名称。 IMPORT_FROM: 从模块中加载特定的名称。 IMPORT_STAR: 从模块中导入所有名称。 加载和存储操作 LOAD_CONST(consti): 将常量 co_consts[consti] 推入栈顶。 LOAD_NAME(namei): 将名称 co_names[namei] 对应的值推入栈顶。 LOAD_FAST(var_num): 将局部变量 co_varnames[var_num] 推入栈顶。 STORE_NAME(namei): 将栈顶的值存储到名称 co_names[namei]。 STORE_FAST(var_num): 将栈顶的值存储到局部变量 co_varnames[var_num]。 算术操作1. 数学运算这些操作码用于执行基本的数学运算,操作数从栈顶弹出,结果推入栈顶。 BINARY_ADD:弹出栈顶两个元素,执行加法运算(TOS = TOS1 + TOS),结果推入栈顶。示例:a + b BINARY_SUBTRACT:弹出栈顶两个元素,执行减法运...
x64dbg手工脱壳学习
发表于2025-01-07|学习
对一个程序壳的理解一个程序被加壳,在我的理解下就是一个程序的代码被加密,从而使ida等反编译工具不能识别为代码数据,然后再在程序前嵌入一块代码,在程序运行时会先进行解密然后再运行。既然如此,我们就可以在运行时解密完程序就把程序提取出来。 下面的程序中,这是我们一开始的点,程序从这里开始。对于一个加了壳的程序而言,它必须先运行解密代码,这段解密代码一般会被xdbg识别为Enterpoint(主入口),而一个函数的执行必须先压入栈,结束时又要弹出栈,且先入栈的最后弹出,那么在第一个被压入的栈被弹出时,也就意味着一个函数的结束,我们可以在第一个入栈时的栈顶RSP下断点,那么在出栈时就会断在函数结束的位置,从而走完解密程序我们只要把解密后的程序dump下来就行了。那么思路就清晰了,步骤就是 寻找解密开始点 在push上下硬件断点 运行到pop的位置(解密结束的位置) 找jmp到主程序的点 在jmp处断点,用scylla进行dump 具体步骤找到程序的入口,运行一步push,在RSP处下硬件断点 运行后停在这个位置,上面有一堆pop,我们执行到下面jmp的位置,然后用scylla...
123…5
avatar
huanghunr
文章
41
标签
8
分类
6
Follow Me
最新文章
D^3CTF2025 Re-wp&复现2025-07-10
2025 r3CTF Re-部分复现2025-07-10
2025ISCC 复现2025-05-21
2025miniLCTF 部分Re-wp+复现2025-05-19
矩阵逆向初步学习2025-05-01
分类
  • Re学习9
  • WriteUp23
  • python脚本1
  • re学习1
  • 学习2
  • 工具5
标签
加解密、编码 re,学习 学习 工具 生活,工具 re,工具 re,WriteUp re,WriteUp
归档
  • 七月 2025 2
  • 五月 2025 3
  • 四月 2025 3
  • 三月 2025 5
  • 二月 2025 3
  • 一月 2025 7
  • 十二月 2024 6
  • 十一月 2024 9
网站信息
文章数目 :
41
本站总字数 :
153.8k
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 By huanghunr框架 Hexo 7.3.0|主题 Butterfly 5.4.3
桂ICP备2024049894号
搜索
数据加载中