限定公開への戻し方を教えてください
はじめに
ここに色々なメモを残す
本当に自分用なので乱雑
最近始めたばっかだからわかんないことしかない
写真のコメントを見る
$ identify -verbose decrypted.png
Image: decrypted.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
〜〜〜〜〜〜略〜〜〜〜〜〜
Properties:
Comment: This is コメント
〜〜〜〜〜〜略〜〜〜〜〜〜
TypeError: Unicode-objects must be encoded before hashing
Python3系でこうなる
hash=hashlib.sha256("AAAAAAABBBBBBB").hexdigest()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Unicode-objects must be encoded before hashing
Python3系では変数に文字列を代入する際にUnicode型のものが入るが、hashlibではこれに対応していないので、エラーの言うとおりencodeしてやる
hash=hashlib.sha256("AAAAAAABBBBBBB".encode('utf-8')).hexdigest()
print(hash)
eec1fa5f1af83a56fe49b550ff052373581076fb4f1972f16f18760e23c11fbe
AESのデコード With Python
secret_key = "0123456789abcdef"
iv = "0123456789abcdef"
aes = AES.new(secret_key, AES.MODE_CBC, iv)
decrypt_data = aes.decrypt(encrypt_data)
keyは16, 24, 32のいずれかのバイト長でなければならない
ValueError: AES key must be either 16, 24, or 32 bytes long
uuencodeうまくいかなかった
デコードがうまくいかなかったからどうやるかわからなかった
$ cat uue.txt | uuencode
usage: uuencode [-m] [-o outfile] [infile] remotefile
$ uuencode < uue.txt
usage: uuencode [-m] [-o outfile] [infile] remotefile
結局わからなかったのでPythonのuuをつかった
import uu
uu.decode("uue.txt", "dec.txt")
追記(2016/11/11)
Python2系だとこうできる
3は無理
>>> print "test".encode("uu")
begin 666 <data>
$=&5S=
end
>>> print "test".encode("uu").decode("uu")
test
複数のファイルが結合されたファイルの情報を見る
fileは3種類のテストをやってくれるけど、最初にテストが成功した時点で実行結果を出力してしまう。
そのため、CTFでしばしば見られる、複数の形式のファイルが1つのファイルに結合されてるやつの情報がうまくつかめなかったりする。
よくしらんけどbinwalkはファイルのどこからどういうフォーマットのファイルがあるかを出してくれる。
$ binwalk test.png
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 1024 x 32, 8-bit/color RGB, non-interlaced
41 0x29 Zlib compressed data, default compression
こんな感じの拡張子を変えると別の形式のファイルになるとかそういうのはこれ使ったら判断できるんじゃないかな
$ binwalk gazou.png
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PNG image, 640 x 480, 8-bit/color RGBA, non-interlaced
41 0x29 Zlib compressed data, default compression
95256 0x17418 Zip archive data, at least v2.0 to extract, compressed size: 93428, uncompressed size: 94601, name: share1.png
188724 0x2E134 Zip archive data, at least v2.0 to extract, compressed size: 93663, uncompressed size: 94902, name: share2.png
282539 0x44FAB End of Zip archive
pkcrack
$ pkcrack -C test.zip -c plaintext.txt -p plaintext.txt -P plaintext.zip -d target.zip
コマンドラインの意味は
-C 暗号化ZIPファイル名
-c 暗号化ZIPファイル内にある平文が分かっているファイル名
-P 平文が分かっているファイルのZIP圧縮したファイル名(暗号化されていないZIP)
-p 平文のファイル
-d 出力するZIPファイル名
-Pは単純に平文のファイルを$ zip -0 [平文]
すればいい (?)
ここよくわからんのでちゃんと調べること
コマンドのヘルプ曰く、-c、-pと他のオプションが1つ以上必要ということらしい
Usage: pkcrack -c <crypted_file> -p <plaintext_file> [other_options],
where [other_options] may be one or more of
-o <offset> for an offset of the plaintext into the ciphertext,
(may be negative)
-C <c-ZIP> where c-ZIP is a ZIP-archive containing <crypted_file>
-P <p-ZIP> where p-ZIP is a ZIP-archive containing <plaintext_file>
-d <d-file> where d-file is the name of the decrypted archive which
will be created by this program if the correct keys are found
(can only be used in conjunction with the -C option)
-i switch off case-insensitive filename matching in ZIP-archives
-a abort keys searching after first success
-n no progress indicator
最初のもこれでいい
$ pkcrack -C test.zip -c plaintext.txt -p plaintext.txt -d target.zip
Standard-lock-key.jpg
apkから読めるjavaファイルができるまで
参考: apkファイルからjavaソースコードを見られるようになるまで
必要物
- apktool (https://ibotpeaches.github.io/Apktool)
- dex2jar (http://sourceforge.net/projects/dex2jar)
- JD-GUI (http://jd.benow.ca/)
手順
- apk -> リソース
- apk -> dex
- dex -> jar
- jar -> class
- class -> java
apk -> リソース
$ apktool d target.apk
リソースがいらないならこのステップはいらない
apk -> dex
$ unzip target.apk
でてくるclasses.dexがそれ
dex -> jar
$ sh dex2jar-2.0/d2j-dex2jar.sh target.apk
jar -> class
$ unzip さっきできた.jar
class -> java
JD-GUIだとかJD-Eclipseだとか好きな方法で見ればいい
apk2dex
必要物をそろえたらいい感じに自動でやってくれるやつ?
RSAに向けた攻撃方法
Common Moduls Attack
コード GOTO Laboratory様のコードをPython3向けに修正
def gcd(a,b):
while b != 0:
a,b = b, a % b
return a
# Extended Greatest Common Divisor
def egcd(a, b):
if (a == 0):
return [b, 0, 1]
else:
g, y, x = egcd(b % a, a)
return [g, x - (b // a) * y, y]
# Modular multiplicative inverse
def modInv(a, m):
g, x, y = egcd(a, m)
if (g != 1):
raise Exception("[-]No modular multiplicative inverse of %d under modulus %d" % (a, m))
else:
return x % m
def common_modulus_attack(c, e, n):
# c = [c1,c2,c3, ... ,cn]
# e = [e1,e2,e3, ... ,en]
assert len(c) > 1
assert len(e) > 1
assert len(c) == len(e)
for i,e_a in enumerate(e):
for j,e_b in enumerate(e[i:]):
if gcd(e_a,e_b) == 1:
break
else:
continue
break
a = egcd(e_a,e_b)
c1 = c[i]
c2 = c[j]
if a[1] < 0:
m = (pow(modInv(c1,n),a[1]*-1,n) * pow(c2,a[2],n)) % n
elif a[2] < 0:
m = (pow(c1,a[1],n) * pow(modInv(c2,n),a[2]*-1,n)) % n
return m
print(common_modulus_attack([c,C], [e,E], n))