逆向工程
Melody0x0
这个作者很懒,什么都没留下…
展开
-
用SSH登陆iOS设备与scp传输文件
Secure Shell(SSH)是建立在应用层基础上的安全协议,用于计算机之间的加密登陆,可以在不安全的网络中为网络服务器提供安全的传输环境。原创 2024-01-15 13:50:53 · 912 阅读 · 0 评论 -
【攻防世界】Reverse——re4-unvm-me writeup
【代码】【攻防世界】Reverse——re4-unvm-me writeup。原创 2024-01-10 21:07:12 · 470 阅读 · 0 评论 -
【攻防世界】Reverse——流浪者
参数inputR的元素作为索引,取得它在aAbcdefghiabcde字符串的数值。最后跟"KanXueCTF2019JustForhappy"做对比。函数,传入包含经过转换后的密码字符整数值的数组。在上面的代码中,获取到的密码字符串(,以进一步验证密码是否符合特定规则。原创 2024-01-10 20:43:55 · 363 阅读 · 0 评论 -
【攻防世界】Reverse——hackme writeup
代码有点多而且乱,需要小心阅读。但逻辑是简单的:输入字符的长度是22,循环比较输入的每个字符与某个数(v24)做异或然后与byte_6b4270的相应位置的字符做对比。原创 2024-01-10 16:22:10 · 385 阅读 · 0 评论 -
【攻防世界】Reverse——re2-cpp-is-awesome writeup
这段代码的主要功能是: 把dword_6020c0数组的每个元素作为索引,查找off_6020a0字符串,得到的结果跟输入的字符串做对比。原创 2024-01-10 15:52:59 · 358 阅读 · 0 评论 -
【攻防世界】Reverse——EasyRE writeup
阅读代码,发现有不少令人困惑的地方,直接阅读汇编代码是更好的选择。main函数的主要功能是:把用户的输入字符串翻转,然后把每个字符加1再跟6做异或,最后跟既定的字符串作比较,相同则显示right。原创 2024-01-10 15:13:00 · 365 阅读 · 0 评论 -
【攻防世界】Reverse——answer_to_everything writeup
flag是与kdudpeh的sha1值:flag{80ee2a3fe31da904c596d993f7f1de4827c1450a}sha1 得到了一个神秘的二进制文件。寻找文件中的flag,解锁宇宙的秘密。注意:将得到的flag变为flag{XXX}形式提交。原创 2024-01-10 14:09:51 · 346 阅读 · 0 评论 -
【攻防世界】Reverse——Mysterious writeup
flag的其他字符已经知道,现在要找到变量source的值,因为source是value的字符形式,而value=v4+1,v4=122,所以value=123,source='123'原创 2024-01-10 13:16:26 · 392 阅读 · 0 评论 -
【攻防世界】Reverse——srm-50 writeup
这个函数主要用于处理一个注册相关的对话框界面。所以flag是:CZ9dmq4c8g9G7bAX。原创 2024-01-10 11:43:06 · 377 阅读 · 0 评论 -
【攻防世界】Reverse—— dmd-50 writeup
如果用户输入的密钥经过MD5哈希后的值与预设的哈希值匹配,则输出 "Thank you!其功能是接收用户输入的一个密钥(key),并对该密钥进行MD5哈希计算。然后,程序将检查生成的哈希值是否等于预设的固定哈希值。对于这个MD5哈希值进行一系列字节级别的比较,以验证它是否与预设的固定哈希值相匹配。" 并同样返回0作为退出状态码。函数对密钥进行MD5哈希运算,并将结果存储在。然后获取哈希值的C字符串表示形式,存放在变量。首先,程序提示用户输入一个有效的密钥。接着,读取用户输入的密钥并存储在。原创 2024-01-10 11:00:13 · 367 阅读 · 0 评论 -
【攻防世界】Reverse—— maze writeup
根据上面的代码我们可以知道:因为35在asc_601060的位置是36,所以我们可以知道循环体结束时候v9和v10的所有可能的取值(0,36),(1,28),(2,20),(3,12),(4,4),事实上仅有可能是(4,4),因为v9,v10的取值范围是【0,8)。input_c=111-》v10++,input_c=46-》v9--, input_c=48-》v9++,而且v9,v10的取值范围都是【0,8)我们可以找到一条由(0,0)到(4,4)的通路,下面黄色数字组成,刚好是18个。原创 2024-01-09 21:30:38 · 402 阅读 · 0 评论 -
【攻防世界】 Reverse—— no-strings-attached writeup
重点是decrypt函数,其他可以不用管。原创 2024-01-09 17:58:21 · 383 阅读 · 0 评论 -
【攻防世界】Reverse——getit writeup
重点是第一个循环体,后面的不用管跟flag无关。原创 2024-01-08 22:40:57 · 341 阅读 · 0 评论 -
【攻防世界】Reverse——logmein writeup
【代码】【攻防世界】Reverse——logmein writeup。原创 2024-01-08 21:46:06 · 386 阅读 · 0 评论 -
【攻防世界】Reverse——simple-unpack writeup
这个程序是UPX加壳过的,可以直接用upx程序脱壳。原创 2024-01-08 21:43:55 · 460 阅读 · 0 评论 -
【攻防世界】Reverse——re1 writeup
【代码】【攻防世界】Reverse——re1 writeup。原创 2024-01-08 21:20:04 · 446 阅读 · 0 评论 -
【攻防世界】Reverse——Hello,CTF writeup
根据代码可知:输入长度是17个,把每个字符转换成16进制,然后连在一起得到的字符串等于"437261636b4d654a757374466f7246756e"。原创 2024-01-08 20:35:47 · 419 阅读 · 0 评论 -
【攻防世界】Reverse——open-source writeup
提交答案时,记得把‘0去掉。原创 2024-01-08 20:13:35 · 367 阅读 · 0 评论 -
【攻防世界】Reverse——game writeup
j_printFlag是flag输出相关的,但是需要满足条件才能执行。但是我们可以直接分析这个代码,就不用管条件或其他的代码。反编译处理的代码有点错误,事实上v3 = v3+v4+v5。原创 2024-01-08 19:56:27 · 346 阅读 · 0 评论 -
【攻防世界】Reverse——elrond32 writeup
要使得程序输出“Access granted”,需要sub_8048414函数返回True。上面的代码时负责输出flag的。原创 2024-01-08 15:06:55 · 319 阅读 · 0 评论 -
【攻防世界】Reverse——re1-100 writeup
该函数创建一个子进程并通过管道进行通信。主要功能是检测调试器的存在,并根据用户输入和预设条件验证特定字符串。创建两个管道(pParentWrite和pParentRead),用于父进程写入数据到子进程以及从子进程读取数据。整个程序设计的主要目的是实现进程间通信,并检测某些特定的安全性或反调试机制。虽然有一大段关于反调试的,但跟flag无关重点是confusekey函数。失败,或在任何过程中出现错误,都会退出程序(exit(1))。注意提交flag时要去掉“{}”。检查程序是否在被调试器运行。原创 2024-01-08 13:59:27 · 459 阅读 · 0 评论 -
【攻防世界】Reverse——simple-check-100 writeup
上面代码中,check_key负责检查输入的key也就是v8是否正确,若正确则使用interesting_function打印flag。check_key与flag无关,可以忽略,重点是interesting_function.只要check_key返回True(1),那么可以让interesting_function执行,直接输出flag。putchar负责输出flag。上面代码中的v4=a1=v7。而flag_data是全局变量。继续执行,输出flag。原创 2024-01-08 11:31:31 · 381 阅读 · 0 评论 -
【攻防世界】Reverse——secret-galaxy-300 writeup
但是上面代码中的result并不是我们要的flag,而是byte_40DAC0数组。原创 2024-01-07 20:47:57 · 432 阅读 · 0 评论 -
【攻防世界】Reverse——BABYRE writeup
在 if ( v5 == 14 && (unsigned int)judge((__int64)s) ) 这行下断点,这时解密方法已经执行,也就是可以跳转到judge函数查看解密后的代码。下面的代码可知:flag的长度是14,通过judge来判断是否成功。但jugde函数是加密过,也就是代码是被混淆过的。所以不可以直接查看。main函数中有下面这段代码,它是用来还原或解密代码的。在“run”后,可看到judge的数值已经发生改变。原创 2024-01-07 12:25:08 · 442 阅读 · 0 评论 -
【攻防世界】Reverse—— IgniteMe writeup
main函数:首先检查前4个字符是否“EIS{”,如果是,则会进入check函数。如果check返回true,则会显示“Congratulations”该函数的主要目的是检查输入字符串是否满足某种特定格式和加密规则,并返回布尔值表示结果。原创 2024-01-07 11:15:40 · 456 阅读 · 0 评论 -
【攻防世界】Reverse——easyre-xctf writeup
从它的名字f_part2,那应该会有个part1。但是strings window并没有任何part1类似的名字。应该是从代码产生的。使用exeinfo得知这个exe文件是经过upx加密的。因为是放在栈上的,以小端序存储。把脱壳的exe文件拖到ida进行分析。原创 2024-01-05 21:34:30 · 495 阅读 · 0 评论 -
【攻防世界】Reverse——toddler_regs writeup
直接从main函数一步步分析会找到fake的step2。于是,首先查看strings windows有没有线索,这个flag会相关吗?原创 2024-01-05 20:41:46 · 470 阅读 · 0 评论 -
【攻防世界】Reverse——easyEZbaby_app writeup
该程序通过检查输入的用户名和密码,合法则登录成功。题目的答案就是flag{用户名密码}。原创 2024-01-05 20:35:35 · 448 阅读 · 0 评论 -
【攻防世界】Reverse——ereere writeup
要做逆向,所以先解密newBase64(下面的fromBase64函数),然后再decrypt。这样就很清晰,首先对输入进行加密(encrypt),然后在通过一个修改过的Base64函数(仅仅是修改了表的顺序,这个解密方法我在做mobile easyjni那篇博客上有具体步骤,这里不详细解释)。查看strings window,看到字符串“correct”和“wrong“,猜测字符串所在的位置就是我们要分分析的内容。反编译代码发现代码有点乱,因为大部分变量名是没有意义的,是很难读懂的。原创 2024-01-05 17:52:37 · 528 阅读 · 0 评论 -
【攻防世界】Reverse——bad_python writeup
发现无法编译成功,结合题目名字bad_python和cpython-36.pyc, 猜测是用python3.6编译的,但是头部被损坏导致uncompyle无法解析。pyc 文件是 Python 在解释执行源代码时生成的一种字节码文件,它包含了源代码的编译结果和相关的元数据信息,以便于 Python 可以更快地加载和执行代码。复制正常文件的头到pyre-cpython-36.pyc,就可以成功编译了。使用下面的代码得到flag。原创 2024-01-05 13:29:28 · 510 阅读 · 1 评论 -
【攻防世界】Reverse——xxxorrr writeup
它的逻辑很简单,就是s1和输入做异或,回调函数调用check函数s1与s2做对比,相同则“Congratulations”。但这样得到的结果是不对的。原创 2024-01-05 09:45:13 · 599 阅读 · 1 评论 -
【攻防世界】Reverse——happyctf writeup
【代码】【攻防世界】Reverse——happyctf writeup。原创 2024-01-03 19:01:03 · 648 阅读 · 1 评论 -
【攻防世界】Reverse——crypt writeup
就是对输入的内容进行处理后与一个数组做对比,相同则输出“nice job”。猜测“nice job"是输入正确答案后的输出,ctrl+x定位到代码。原创 2024-01-03 18:35:20 · 565 阅读 · 1 评论 -
【攻防世界】Reverse—— 666 writeup
输入经过encode后需要与enflag('izwhroz""w"v.K".Ni')的值相同。这个flag会是我们要的flag吗?把666文件拖进ida64, 查看它的strings。明显f这个“flag***”不是我们要的答案。原创 2024-01-02 16:14:04 · 431 阅读 · 1 评论 -
【攻防世界】Reverse——Reversing-x64Elf-100 writeup
重点是理解下面的代码:把v3是一个二维数组,每个数组元素是一个字符。循环体内按一定规则取一个字符减去输入的字符串中的某个字符的值,若不为1,则失败。用下面的python代码取得flag。原创 2024-01-02 15:31:54 · 592 阅读 · 1 评论 -
【攻防世界】mobile rememberOther
这个方法主要用于验证用户名和序列号。用户名必须非空,序列号必须非空且长度为16。然后,它会计算用户名的MD5哈希,并与序列号进行比较。如果两者匹配,则返回。但这个并不是答案,在题目的zip文件里还有一个docx文件。所以答案:YOU_KNOW_ANDROID。原创 2023-12-30 21:49:02 · 320 阅读 · 0 评论 -
【攻防世界】mobile easy-so writeup
从下面的代码知道,它调用了cyberspace的CheckString方法,而这个CheckString调用了so里的函数。这样就很容易理解,它主要是用于交换输入字符串的字符。下面是它的逆向,输出就是flag。CheckString方法里J_TestDec方法,用于对传入的字符串做处理。上面的c++代码有点乱,为了方便理解,我用python代码重写了。原创 2023-12-30 12:08:04 · 329 阅读 · 0 评论 -
【攻防世界】mobile app2 writeup
但是这里我们用另一种方法。这个程序有多个Activity,启动顺序是MainActivity得到的输入传入并启动Second Activity,在SecondActivity的Oncreate函数中调用So文件的doRawData,看得到的结果是否与既定的字符串相等。doRawData的代码中使用AES加密,加密的密钥在代码中有就是thisisatestkey==。上面的命令启动app,下面的命令调用activity,然后你就会在手机上看到flag:Cas3_0f_A_CAK3。原创 2023-12-29 23:02:10 · 389 阅读 · 1 评论 -
【攻防世界】mobile easy-apk writeup
用人类的语言简单描述它的编码方法:把3个byte扩展成4个byte,然后每个byte的值通过查表Base64ByteToStr,转换成字符输出。把3个byte(设为o[3])扩展成4个byte(设为n[4]),就是取a[0]的前6位组成新的byte(b[0]),然后把o[1]最后2个位和第二个byte的前4个位组成b[1],把的o[1]的后四位和o[2]的前2位组成b[2],最后o[2]的后6位组成n[3]。这个题目的重点是理解它定义的Base64New的编码方法,然后写出Base64New的解码。原创 2023-12-29 20:43:33 · 369 阅读 · 1 评论 -
【攻防世界】mobile App1 Writeup
这个题目属于最简单的入门级别,但要注意代码里故意交换了versionName和versionCode的赋值。原创 2023-12-29 16:47:13 · 370 阅读 · 1 评论