buu reverse1 先运行
查,64位,拖IDA,但是没有main函数,但是我们可以找到flag相关的函数
跟进
这块可以反汇编
看if语句可以知道,Str2里面的值传给Str1,相等就是flag
点开Str2
交了发现错了。应该要改点什么,回到上面找加密
按R转换字符,111是o,48是0,所以把所有的o变成0,交上了
reverse2 查,64位,拖IDA
如出一辙,跟进flag
交了发现又错,再回去看上面什么加密
如出一辙。用1替换掉i和r一交就行
内涵的软件 先运行
调皮~
IDA梭
它就是flag
新年快乐 运行
查,有upx壳,先脱壳
拖IDA
就是它
xor 常规操作
知道了flag长度33,且进行了一次xor,然后与global比较,跟进
发现字符串,可以shift+e提取出来
查资料得知xor后再xor一遍就可以还原 ,直接写解密脚本
1 2 3 4 5 6 7 8 a=[102 , 10 , 107 , 12 , 119 , 38 , 79 , 46 , 64 , 17 , 120 , 13 , 90 , 59 , 85 , 17 , 112 , 25 , 70 , 31 , 118 , 34 , 77 , 35 , 68 , 14 , 103 , 6 , 104 , 15 , 71 , 50 , 79 , 0 ] flag="" for i in range (len (a)-1 ): flag+=chr (a[i]^a[i-1 ]) print(flag)
helloworld apk,常规操作看Java源码
秒了
不一样的flag 运行
上下左右,猜想是迷宫题
直接拖IDA找迷宫
变成5*5的一个迷宫
过迷宫,22244114422包上flag就是了
SimpleRev 常规操作,64位IDA
必然在Decry里,跟进,看见变量按R逆取,然后key1,3里面可以点进去,直接拼出来完整的,往下分析代码写解密脚本就行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <iostream> #include <stdio.h> #include <iomanip> #include <math.h> #include <string.h> #include <stdlib.h> #include <bits/stdc++.h> using namespace std ;int main () { char a[]="adsfkndcls" ; char b[]="killshadow" ; int c=10 ; int i; for ( i = 0 ; i < 10 ; i++ ) { for (int j=0 ;j<128 ;j++){ if (j<'A' ||j>'z' ||j>'Z' &&j<'a' ) continue ; if ((j-39 -a[c % 10 ]+97 )% 26 + 97 ==b[i]) { printf ("%c" ,j); c++; break ; } } } }
Java逆向解密 拿到class文件,丢idea看
关键只有中间那串for循环里的运算,KEY是加密后字符串,直接写出解密脚本
1 2 3 4 5 a=[180 , 136 , 137 , 147 , 191 , 137 , 147 , 191 , 148 , 136 , 133 , 191 , 134 , 140 , 129 , 135 , 191 , 65 ] flag="" for i in range (len (a)): flag+=chr (a[i]-64 ^32 ) print(flag)
[GXYCTF2019]luck_guy IDA分析main
很简单,v4满足条件后跟进patch_me
所以是为偶数的话进入get_flag
看switch,case1的时候跟进f1发现
case4发现f2为0x7F666F6067756369LL,由于是小端序存储,写脚本时需要调整为逆序
case5注意循环内是8,f2就可以拆成[0x7F,0x66,0x6F,0x60,0x67,0x75,0x63,0x69]刚好是8
1 2 3 4 5 6 7 8 9 10 11 flag="GXY{do_not_" f2=[0x7F ,0x66 ,0x6F ,0x60 ,0x67 ,0x75 ,0x63 ,0x69 ][::-1 ] for i in range (8 ): if i%2 ==1 : s=chr (f2[i]-2 ) else : s=chr (f2[i]-1 ) flag+=s print (flag)
[BJDCTF2020]JustRE IDA跟进DialogFunc
知识补充:C 库函数 – sprintf() | 菜鸟教程 (runoob.com)
把19999和0分别填入输出位置即可
简单注册器 jadx直接找MainActivity
直接把这段代码拿出来单跑就行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.jingfei.Encryptoin;class main { public static void main (String[] args) { char [] x = "dd2940c04462b4dd7c450528835cca15" .toCharArray(); x[2 ] = (char ) ((x[2 ] + x[3 ]) - 50 ); x[4 ] = (char ) ((x[2 ] + x[5 ]) - 48 ); x[30 ] = (char ) ((x[31 ] + x[9 ]) - 48 ); x[14 ] = (char ) ((x[27 ] + x[28 ]) - 97 ); for (int i = 0 ; i < 16 ; i++) { char a = x[31 - i]; x[31 - i] = x[i]; x[i] = a; } System.out.println("flag{" + String.valueOf(x) + "}" ); } }
pyre pyc反编译py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 print 'Welcome to Re World!' print 'Your input1 is your flag~' l = len (input1) for i in range (l): num = ((input1[i] + i) % 128 + 128 ) % 128 code += num for i in range (l - 1 ): code[i] = code[i] ^ code[i + 1 ] print codecode = [ '\x1f' , '\x12' , '\x1d' , '(' , '0' , '4' , '\x01' , '\x06' , '\x14' , '4' , ',' , '\x1b' , 'U' , '?' , 'o' , '6' , '*' , ':' , '\x01' , 'D' , ';' , '%' , '\x13' ]
解密脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 print ('Welcome to Re World!' )print ('Your input1 is your flag~' )code = [ '\x1f' , '\x12' , '\x1d' , '(' , '0' , '4' , '\x01' , '\x06' , '\x14' , '4' , ',' , '\x1b' , 'U' , '?' , 'o' , '6' , '*' , ':' , '\x01' , 'D' , ';' , '%' , '\x13' ] for i in range (len (code)-2 ,-1 ,-1 ): code[i] = chr (ord (code[i])^ord (code[i+1 ])) for i in range (len (code)): print(chr ((ord (code[i])-i)%128 ),end="" )
rsa wp参考:(13条消息) buu RSA_ao52426055的博客-CSDN博客
大素数分解网站:http://www.factordb.com
发现pubkey:
1 2 3 4 -----BEGIN PUBLIC KEY----- MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+ /AvKr1rzQczdAgMBAAE= -----END PUBLIC KEY-----
公钥解析
分解n分别得到p,q,用rsatools解出密钥d
1 2 3 4 5 6 7 8 9 10 11 12 13 import rsae= 65537 n= 86934482296048119190666062003494800588905656017203025617216654058378322103517 p= 285960468890451637935629440372639283459 q= 304008741604601924494328155975272418463 d= 81176168860169991027846870170527607562179635470395365333547868786951080991441 key = rsa.PrivateKey(n,e,d,q,p) with open ("E:\\ctf\\re\\buu\\41c4e672-98c5-43e5-adf4-49d75db307e4\\output\\flagenc.txt" ,"rb" ) as f: f = f.read() print(rsa.decrypt(f,key))
ACTF easyre 先upx脱壳
1 2 3 4 5 6 v4="*F'\"N,\"(I?+@" key= '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' flag='' for i in v4: flag+=chr (key.find(i)+1 ) print(flag)