自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

whklhhhh的博客

一只逆向小菜鸡

  • 博客(640)
  • 收藏
  • 关注

原创 180626 逆向-SUCTF(Python大法好)

时隔许久详细的复现一下~ 这个题目也挺有意思的,刺激学了一遍pyc233题目提供了一份opcode.txt、elf二进制程序a和一个密文cipher.txtopcode打开来可以发现是pyc的解析虽然有code,但是试着用python解析了一下发现有点复杂读opcode是不可能的,这辈子都不可能的 本来读起来就麻烦,缺少符号信息就更恐怖了,更别说还有lambda和jo...

2018-06-27 02:22:55 1940

原创 180621 逆向-SCTF(3)

crackme2java层调用了native函数,要求返回值为15 在so中动态注册了tryit函数,但函数体为乱码,估计在init中动态解密 于是上动态调试,发现解密后的函数通过fork创建了子进程来执行计算,父进程则逐字符校验 校验的东西是一个链表,仿照计算通过IDC即可抓出字符串 IDC>auto i,k;for(k=Dword(0x5db82040),i...

2018-06-22 14:27:49 329

原创 180620 逆向-SCTF(2)

Script In Script下载下来文件,观察js发现有动态解密 将eval改为console.log后即可在console中抓到解码后的函数 也可在click函数中的r处下断,单步跟进后逐个查看函数function a(r) { return D(~r, 1)}function D(r, n) { return n ? D(r ^ n, (r &...

2018-06-20 23:16:52 242

原创 180619 逆向-SCTF(1)

simple反编译发现动态解密了assets中的zip文件,由于解密的dex会落地因此可以直接运行后从文件目录中pull出来 再反编译这个load.dex,onClick函数中接收了24个字符并以每8个字符一组构造Square,最后调用其中的check函数要求全部为True 构造方法为 new Square((v1[i + x] << 8) + v12 + 255, ...

2018-06-20 22:52:02 428 4

原创 180615 开发-操作系统实验(进程调度)

实验一 进程调度 一、实验目的 多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。 二、实验内容 1. 优先权法、轮转法 简化假设 1) 进程为计算型的(无I/O) 2) 进程状态:ready、running、finish 3) 进程需要的CP...

2018-06-15 11:09:21 2213 1

原创 180531 逆向-SUCTF(Enigma)

Enigma 恩尼格码是一个由德国人亚瑟·斯雪比尤斯发明的密码机,开创了自动化加密的先河。简单来说,恩尼格码密码机利用三个转子对字母顺序进行偏移,相当于三重维吉尼亚。除此以外还有一块可以改变字母对应顺序的连接板。恩尼格码这个密码机也算比较出名了,做题之前先去回忆了一下恩尼格码的原理。(后来发现完全没用orz 打开main函数,跳过字符画后的流程很简单 接受输入-校验长度-...

2018-05-31 22:35:34 1151

原创 180523 安卓-DDCTF(详细复现版)

Hello Baby Dexjeb反编译发现不少第三方库,其中一个com.meituan.robust包搜索一下可以发现是美团开发的一个开源热更新框架 参照使用教程可以发现补丁的位置在PatchExecutor类调用的PatchManipulateImp类中的fetchPatchList方法中调用的setLocalPath方法处设置 于是跟着去找 cn.chaitin.geektan.c...

2018-05-31 15:22:42 1287

原创 180516 逆向-ISCC(re3)

题目名为混淆和编码,有点恐怖(:з」∠) 打开main函数,发现仅对输入进行了fencode和encode两次处理后就与字符串比较,很简单明了 fencode的流程如下: 整体扫一下,是通过对code这个变量的比较和赋值来控制程序流程的,看起来有点像VM 不过再看一下程序流程图就清楚了: 这不就是控制流平坦化嘛 粗略扫了一遍,核心部分仅有以下两句v10 += a...

2018-05-25 18:45:56 696

原创 180509 Pwn-ISCC(Pwn2)

写作Pwn3读作Pwn2 23333 打开pwn3反编译,发现菜单,很明显是堆的题目了 看了一下在free的时候没有清空指针,造成野指针 以我浅薄的知识猜想是double free吧参考ctf-wiki的fastbin-attack 主要漏洞在于通过fastbin管理堆的情况下,在free时仅会检查链表头部(即main_arena指向)的chunk 第一次释放free(chun...

2018-05-25 18:45:47 879

原创 180503 Pwn-ISCC(1)

pwn复健的第一题(:з」∠)还好比较简单 简单分析一下,在Menu中存在栈溢出,并且没有Canary保护 不过有NX保护,因此无法直接传入Shellcode 查了一下pwn的相关知识,发现这里导入了system函数,因此可以直接使用ret2system来getshellsystem传参的寄存器是edi 这个常识级别的东西因为不记得,导致用栈传参试了半天不知道为啥错orz发现这个点...

2018-05-25 18:45:32 518

原创 180522 安卓-DDCTF2018(RSA)

RSAJAVA层没什么东西,直接将输入送入了Native层的stringFromJNI函数 这个函数垃圾代码极其的多 建议动态调试,跟随输入值来观察计算过程 在主函数中首先用gpower生成了32个字节的i²Table,又GetTicks取了两次时间,然而都没有用上 sub_3133C调用了input,从其中用到的字符串 “basic_string::_S_constr...

2018-05-23 11:27:43 743

原创 180517 逆向-反控制流平坦化(符号执行脚本)

控制流平坦化的相关理论百度有很多,简单来讲就是将代码块之间的关系打断,由一个分发器来控制代码块的跳转 正常流程如下 经混淆后的流程如下 破坏了代码块之间的关系后,整个程序的逻辑将很难辨认 符号执行的思路是遍历所有路径,将分发器等无用的代码跳过,恢复代码块之间的联系 由于跳转的代码极有规律,因此在跨过分发器,找到代码块之间联系的基础上修复控制流就难度不大了 符号执行反...

2018-05-17 21:37:40 4800

原创 180515 逆向-被隐藏的真实(DDCTF_Re3)

这题本来单纯地以为是很简单的题,听欧佳俊师傅讲了一下出题思路才发现他的想法真的比答题人多得多……main函数里调用了三次get_pwd()这个函数来check输入 get_pwd中接受输入,然后对count自增,调用了Bitcoin对象的一个函数来校验输入 如果熟悉C++逆向的话,一眼就能看出来这是在调用虚函数 因为v2是对象的空间,在C++的对象构造中,开头4个字节指向的是虚函...

2018-05-15 00:47:07 1366

原创 180502 逆向-wcm(2)

放着一个猜出的flag不是我的风格,于是又仔细看了一下~ 首先将输入encode成hex以后送入了这个函数中 对于非字母,也就是数字部分直接查一个表即可 逆的时候也就是相应的反查这个表的index了,很简单,没啥好说的 同时因为flag的hex大部分是0x6?,因此这个判断机制实际上大部分都落在数字部分里了,这也最终让我昨天猜了过去233对于字母就有些复杂了,会通过函数sub...

2018-05-02 22:41:26 406

原创 180501 逆向-RedHat(Reverse)

AK了(:з」∠)题目难度相对不太大,不过识别算法的思路还是学到了 Reverseicm反编译main函数,校验了长度42以后在函数中进行判断 发现每8个字节进行一次处理,最后异或119-i后和数组比较 将其dump出来备用,查看处理函数 发现在其中把指定种子的随机数作为密钥,然后把输入的8个比特编码成4个int,再变换,最后解码还原,顺便异或了8-i 那么关键...

2018-05-02 19:44:09 623 1

原创 180421 安卓-DDCTF_WP(Android)

要赶的WP太多了(:з」∠)日后有机会再把更详细的心得和内容补上吧AndroidRSA垃圾代码比较多 动态调试,跟随输入值进入,发现将输入放在了一个结构体中,然后用后八字节作为指针来控制 要求len为31字节 将输入逐字节异或了一个数组以后,遍历结果,要求满足一下关系式: a[i] == a[i+10] 即一个10字节长度的字符串循环3遍 通过校验以后将a[10...

2018-04-21 20:05:07 669 5

原创 180420 逆向-DDCTF_WP(Re)

ReverseBaby MIPSIDA打开发现几个字符串结构都很清晰,提供16个变量,然后进行16次方程校验 但是运行会发现在中间就因为段错误而异常 尝试许久以后发现几个不太对劲的指令,突兀出现的t,t,t, sp, 跳转等等的机器码都为EB02开头,猜测为花指令,于是使用IDC脚本去花 注意MIPS为定长指令集,每个指令都为4字节,因此需要固定监测指令的头部,否则可能会误清除掉...

2018-04-21 20:00:42 1579 1

原创 180321 逆向-代码的二次开发(3)获得函数的调用

1625-5 王子昂 总结《2018年3月21日》 【连续第536天总结】 A. 代码的二次开发(3) B.获得函数的调用在扩充程序功能时,有时会遇到调用的API函数不在输入表中 在应用程序调用DLL中的函数之前,DLL文件映像必须被映射到调用进程的地址空间中方法有两种: 1. 加载时的隐式链接。即修改输入表,增加需要的API函数 2. 运行时的显示链接。即显式链接调用D...

2018-04-11 16:58:30 544

原创 180320 逆向-代码的二次开发(2)手工构造区块

1625-5 王子昂 总结《2018年3月20日》 【连续第535天总结】 A. 代码的二次开发(2) B.手工构造区块区块间隙的空间大小是有限的,如果所需代码不多,那么上述方法方便快捷。但是如果需要添加的代码比较多的话,区块间隙就不够用了。此时必须手动添加区块。手工构造区块必须熟悉PE格式,实际操作时一般可用工具辅助。 主要有3个工作要做: 1. 增加块头 2. 增加块头...

2018-04-11 16:32:23 305

原创 180319 逆向-代码的二次开发(1)区块间隙的利用

1625-5 王子昂 总结《2018年3月19日》 【连续第534天总结】 A. 代码的二次开发(1) B. 前言这里的二次开发主要指的是在没有源码和接口的情况下扩充可执行文件的功能,目标是二进制的EXE或DLL文件,需要用汇编实现相关功能,或构造一个接口,调用其他语言实现功能。该技术主要是修改扩充PE结构,对PE文件进行DIY,因此又叫PEDIY技术增加空间最首要解...

2018-04-03 23:23:59 376 1

原创 180318 开发-QQ资料爬虫

1625-5 王子昂 总结《2018年3月18日》 【连续第533天总结】 A. QQ资料爬虫 B. 通过接口爬取指定QQ的信息 接了个单子,要求获取表格中的指定QQ的相关信息最先想到的思路是HookQQ的资料窗口相关的函数,通过注入Dll来调用,然后直接找到内存中的数据,获取即可后来查了一下发现更简便的思路:通过上古时期手Q/webQQ遗留下的接口来post数据获取 为什么...

2018-04-03 17:36:20 1142 3

原创 180317 逆向-DragonQuest(NUST)

1625-5 王子昂 总结《2018年3月17日》 【连续第532天总结】 A. nust南理校赛 DragonQuest B.解压得到exe和dll 顺手拖入IDA,发现是.NET程序 dnspy打开发现主程序加壳了,查了一下壳无果 exeinfoPE还推荐我用RL!dePacker和QuickUnpack这两个万能脱壳机,坑爹呢这是~我还以为它觉得能脱呢,折腾了半小时研究怎么用...

2018-04-03 17:27:18 383

原创 180316 逆向-反调试技术(9)防止附加和父进程检测

1625-5 王子昂 总结《2018年3月16日》 【连续第531天总结】 A. 反调试技术(9) B.防止调试器附加R3调试器的附加使用的是DebugActivePocess函数,在附加相关进程时,会首先执行到ntdll.dll下的ZwContinue函数,最后停留在ntdll.dll的DbgBreadkPoint处可以通过Hook上述两个函数,如果执行了则说明有调试器附加 ...

2018-04-03 17:25:32 2136

原创 180315 逆向-反调试技术(8)调试器漏洞

1625-5 王子昂 总结《2018年3月15日》 【连续第530天总结】 A. 反调试技术(8) B.调试器漏洞只要是软件,就存在漏洞,调试器当然也不例外。 以OD为例OutputDebugStringA 这个API向调试器发送一个格式化的串,OD会在底端显示相应的信息 而OD中对这个API存在一个格式化字符串漏洞 有些版本的OD已经修复了这个漏洞DRx清理BUG...

2018-04-03 17:02:06 438

原创 180314 逆向-反调试技术(7)调试器检测

1625-5 王子昂 总结《2018年3月14日》 【连续第529天总结】 A. 反调试技术(7) B.调试器检测书上讲了很多SoftICE的检测方法,但是那玩意儿连XP都不支持,时代的眼泪了……OD的检测方法查找特征码 遍历进程,将特定地址处的值与OD的特征码进行比对,相同则确定是OD 不过这种方法只针对特定版本的软件,不同版本可能会使得特征码不同,因此有一定缺...

2018-04-03 16:57:18 1891

原创 180313 逆向-反调试技术(6)Hook和AntiHook

1625-5 王子昂 总结《2018年3月13日》 【连续第528天总结】 A. 反调试技术(6) B.Hook和AntiHook壳通过调用ThreadHideFromDebugger检测调试器,于是OD的HideOD插件就是通过对ThreadHideFromDebugger的Hook来对抗的最早期直接在入口写入retn 10来直接返回,防止函数的调用 于是外壳也进行了改进:...

2018-04-03 00:07:07 1261

原创 180312 逆向-反调试技术(5)NativeAPI

1625-5 王子昂 总结《2018年3月12日》 【连续第527天总结】 A. 反调试技术(5) B.NativeAPIAPI的调用过程中,User态和Kernel态的通信仅通过ntdll.dll 换句话说,Win32子系统和兼容的Win16、MSDOS、OS/2等子系统都是通过kernel32.dll或直接调用ntdll.dll的 然后ntdll.dll通过int 0x...

2018-04-02 23:46:35 365

原创 180311 逆向-反调试技术(4)SystemKernelDebuggerInformation

1625-5 王子昂 总结《2018年3月11日》 【连续第526天总结】 A. 反调试技术(4) B.SystemKernelDebuggerInformationNativeAPI中还有一个函数ZwQuerySystemInformation 当SystemInformation = SystemKernelDebuggerInformation的时候可以判断是否有系统调...

2018-03-23 16:55:13 1031

原创 180310 逆向-反调试技术(3)DebugObject

1625-5 王子昂 总结《2018年3月10日》 【连续第525天总结】 A. 反调试技术(3) B. DebugObject之前都是从被调试进程入手找痕迹,除此以外调用了DebugAPI的调试器必然要向系统进行声明注册,因此从调试器一边寻找痕迹也是可行的 调试器与被调试程序建立关系有两种途径在创建进程时设置DEBUG_PROCESS调用DebugActiveP...

2018-03-23 12:42:18 727

原创 180309 逆向-Section加密(WhaleAndroid03)(2)

1625-5 王子昂 总结《2018年3月9日》 【连续第524天总结】 A. AndroidSection加密题目 (2) B. 注意点adb的冲突以前当DDMS开启时,cmd中的adb就会被终止 而再开启cmd中的adb的话,DDMS又会被终止 使得我以为adb和DDMS是冲突的 但是查询发现调试JNI_Onload必须在开启DDMS的状态下,又用IDA附加,说明两者是可以同时进行的

2018-03-23 12:41:44 314

原创 180308 逆向-Section加密(WhaleAndroid03)

1625-5 王子昂 总结《2018年3月8日》 【连续第523天总结】 A. AndroidSection加密题目 B. Android03 背景: 某企业反馈其员工专用手机上,被安装了一个间谍软件,该软件会不定期自动连接一个疑似黑客控制的服务器,服务器的连接密码内嵌在该软件中。 问题: 逆向分析此间谍软件,获取其服务器的连接密码。 FLAG格式为flag{xx}首先反编

2018-03-23 12:41:16 576

原创 180307 逆向-反调试技术(2)CheckRemoteDebuggerPresent

1625-5 王子昂 总结《2018年3月7日》 【连续第522天总结】 A. 反调试技术(2) B. CheckRemoteDebuggerPresentBOOL CheckRemoteDebuggerPresent(HANDL hProcess, PBOOL pbDebuggerPresent);这是另外一个MSDN上提供的检测调试器的函数,测试发现及时修改Be...

2018-03-23 12:40:22 1532 2

原创 180306 逆向-反调试技术(1)BeingDebugged

1625-5 王子昂 总结《2018年3月6日》 【连续第521天总结】 A. 反调试技术(1) B. BeingDebuggedWin32API为程序提供了IsDebuggerPresent来判断自己是否处于调试状态,懒惰的程序员使用这个API来自欺欺人 实现源码为:IsDebuggerPresent(VOID){ return NtCurrentPeb(...

2018-03-22 16:44:04 1809

原创 180305 逆向-文件完整性校验(1)

1625-5 王子昂 总结《2018年3月5日》 【连续第520天总结】 A. 文件完整性校验(1) B. 反调试、加密保护等的对抗措施通常是Patch,即修改程序 另一方面,为了防止程序被篡改而产生的病毒破坏、信息改动等 产生了完整性校验的技术 通常使用哈希函数来计算文件的散列值,并保存该值,然后运行时再次哈希,并比对。磁盘文件校验CRC算法可以对一段字符串进行...

2018-03-22 16:43:38 703

原创 180304 逆向-抵御静态分析(3)

1625-5 王子昂 总结《2018年3月4日》 【连续第519天总结】 A. 抵御静态分析(3) B. 信息隐藏为了提高界面的友好度,大多数软件都会在大量地方显示提示语。 而这些提示语由于特殊性和特征明显,经常被作为静态分析的突破口。(例如IDA的Shift+F12,OD的智能搜索字符串233) 破解者循着破解点的字符串即可直接找到破解点的代码,进行操作。 为了防范...

2018-03-22 16:34:08 258

原创 180303 逆向-抵御静态分析(2)

1625-5 王子昂 总结《2018年3月3日》 【连续第518天总结】 A. 抵御静态分析(2) B. SMC技术SMC(Self-Modifying Code),即自修改代码 34c3ctf的re1就是使用这项技术的题目,结合随机数使其静态分析看起来很迷惑。相当有意思的题目 SMC技术是事先将代码进行加密,存放在程序中。然后程序运行时对其解密,使其成为可执行的代码后...

2018-03-22 16:33:37 296

原创 180302 逆向-抵御静态分析(1)

1625-5 王子昂 总结《2018年3月2日》 【连续第517天总结】 A. 抵御静态分析(1) B. 静态分析是逆向工程中常用的手段。 因此抵御静态分析也是一个很值得深入的话题。花指令在反汇编的过程中,存在着几个关键的问题。 其中之一就是数据与代码的区分问题。 汇编指令长度、多种多样的间接跳转实现形式,反汇编算法必须对这些情况作出恰当的处理,保证反汇编结果的正确性。 ...

2018-03-22 16:32:44 477

原创 180301 逆向-防范算法求逆(3)

1625-5 王子昂 总结《2018年3月1日》 【连续第516天总结】 A. 防范算法求逆(3) B. 游击战术将验证函数F分解成多个互不相同的Fi,然后将Fi尽可能地隐藏到程序里去层层叠叠通过任意一个Fi的验证都只是注册码合法的必要条件,而非充分条件。真正合法的注册码能够通过所有的Fi的验证。而仅仅通过部分验证的R会在其他通不过的验证处被发现。 这种方法虽...

2018-03-22 16:32:16 271

原创 180228 逆向-防范算法求逆(2)

1625-5 王子昂 总结《2018年2月28日》 【连续第515天总结】 A. 防范算法求逆(2) B. 堡垒战术事实上,在通信领域,人们早就开始对身份校验的研究,发展出了散列加密和非对称加密等优秀的密码学算法,其中的MD5算法和RSA算法很适合在软件注册算法中运用MD5Message Digest Algorithm MD5(消息摘要算法第五版),是一种广为运用...

2018-03-22 16:31:53 248

原创 180227 逆向-防范算法求逆(1)

1625-5 王子昂 总结《2018年2月27日》 【连续第514天总结】 A. 防范算法求逆(1) B. 基本概念软件保护的目的是向合法用户提供完整的功能,因此身份校验是必须的 这一环节通常采用注册码验证的方式实现 流程用户向作者提供用户码U, 申请注册作者计算出注册码R=f(U),返回给合法用户合法用户在软件中输入U和R软件验证F(U, R)来判断...

2018-03-22 16:31:32 257

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除