Capture The Frog

かえるぴょこぴょこw

MENU

Androidアプリのリリースで詰まった話

かんたんなAndroidのアプリを開発していて、

debug版のアプリの"google signin"は出来るのに、release版では"google signin"が

com.google.android.gms.common.api.ApiException:10

のエラーによって出来ない。

結果からいうと、このエラーは releaseのsha-1が設定されていないことが原因となります。

断定方法

この画面の右端にあるgradleタブの ゾウをクリック "gradle signingReport"と入力 そして、下の写真のように Variant: releaseの部分が、nullになっていたら、この問題はここが起こしているといって間違いないと思います。

qiita.com

Androidのnavigationでの矢印の色変更

Androidのnavigationコンポーネントを利用してActionBarを自動で作ったときに矢印の色を変更するのに、 少し手間取ったので備忘録として書いておく。

今回は、デフォルトの白の矢印を下のようなこの黒い矢印にしたい。↓

themes.xmlにて

<!-- デフォルトのTheme -->
<style name="MyTheme" parent="Theme.AppCompat">
   <item name="drawerArrowStyle">@style/MyDrawerArrowToggle</item>
</style>

<!-- デフォルトの下に貼る -->
<style name="MyDrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
  <item name="color">@color/white</item>
</style>

opencvとPytorchを組み合わせたときのバグ

なぜか、25個以上のバウンディングボックスを表示できない

import torch
import cv2
import numpy as np

#定数
IMAGE_PATH = '/home/snowyowl/Downloads/yolov5-master/data/images/252532.jpg'

#yolov5を動かす
model = torch.hub.load('/home/snowyowl/Downloads/yolov5-master', 'custom', path='/home/snowyowl/Downloads/yolov5-master/yolov5s.pt', source='local')

img = cv2.imread(IMAGE_PATH) 
results = model(img)
results.display(pprint=True)


image 1/1 /home/snowyowl/Downloads/yolov5-master/data/images/classroom.jpg: 480x640 33 desks, Done. (0.070s)
↑yolov5で直接実行

image 1/1: 3024x4032 25 desks


25で止まってる。Qなんで?
A

import torch
import cv2
import numpy as np
 
#定数
IMAGE_PATH = '/home/snowyowl/Downloads/yolov5-master/data/images/classroom.jpg'
 
#yolov5を動かす runs/train/exp80/weights/best.pt
model = torch.hub.load('/home/snowyowl/Downloads/yolov5-master', 'custom', path='/home/snowyowl/Downloads/yolov5-master/yolov5s.pt', source='local')
results = model(IMAGE_PATH)
results.display(pprint=True)
results.show()

多分opencvの方の問題
results = model(IMAGE_PATH)
modelの引数を直接IMAGE_PATHにしたら、直った

parrot osの/etc/apt/sources.listを編集する

他のubuntuやkali linuxでは/etc/apt/sources.listを直接編集すると、コマンドのsourceをダウンロードすることができるのだが、 parrot osでは/etc/apt/sources.list.d/parrot.listにまとめられており、/etc/apt/sources.listは空ファイルとなっている。

↓/etc/apt/sources.list

# This file is empty, feel free to
# add here your custom APT repositories

# The standard Parrot repositories
# are NOT here. If you want to
# edit them, take a look into
#                /etc/apt/sources.list.d/parrot.list



# If you want to change the
# default parrot repositories by selectng
# another localized mirror,
# then use the command
#                     parrot-mirror-selector
#
# and see its usage message to
# know what mirrors are available

そのため、 /etc/apt/sources.list.d/parrot.list

のコメントの#をすべて外す。

## Parrot 4.x Repositories
deb https://deb.parrot.sh/parrot rolling main contrib non-free
deb https://deb.parrot.sh/parrot rolling-security main contrib non-free
deb-src https://deb.parrot.sh/parrot rolling main contrib non-free
deb-src https://deb.parrot.sh/parrot rolling-security main contrib non-free

すると、apt source "好きなコマンド"で好きなコマンドのsourceをダウンロードすることができる。 

GhidraでMalware TechのCTF Shell code編

前回と同じくghidraでMalwareTechのCTFを解いていく。

www.malwaretech.com

 

今回は、[Shellcode]に挑戦していく。

前回の[Hide and Seek]を解いてみた記事はこちら

 

 

Shellcode1

このプログラムのmain関数の役割はentry関数が果たしているので、entry関数に絞ります。

f:id:QWERTYtan:20211202154240p:plain

すると、右の逆コンパイルにentry関数がやっていることが表示されます。

今回は、ここに注目して進めていきます。

f:id:QWERTYtan:20211202154638p:plain

これを見ると、HeapAllocによってヒープ割り当てが18行目に行われていて、

docs.microsoft.com

それがlocal_8に代入されています。そして、そのまま下に降りてくると19行目に*local_8が0x404040とされていて、

20行目にstrlenが&AT_00404040の文字数をsVArlに格納しています。

そして最後にlpText内に格納して、それをメッセージボックス内で表示するようになっています。

明らかに0x404040が怪しいです。

そのため、0x404040を見てみると

f:id:QWERTYtan:20211202160817p:plain

暗号化されていますが、何やら文字列が出てきました。

おそらくこれがflagなのでしょう。

次はどのように暗号化されているかを見てみます。

文字列だと思われる部分を選択して、dを押してアセンブリを表示します。

f:id:QWERTYtan:20211202161227p:plain

0040406dでROL命令をしています。

donkeyhacks.zouri.jp

このコードは、文字列の各バイトを5回左シフトローテーションするだけです。

FLAG{SHELLCODE-ISNT-JUST-FOR-EXPLOITS}

f:id:QWERTYtan:20211202205220p:plain



GhidraでMalware TechのCTF(Hade and Seek)

f:id:QWERTYtan:20211220212227p:plain

一通りアセンブラがそれぞれ何をしているか分かってきたので、練習がてらCTFを解いてみた。

Ghidraは、リバースエンジニアリングツールで.exe等の実行ファイルを逆アセンブル・逆コンパイルツールである。

まだ、インストールしていない人は↓から

ghidra-sre.org

 

今回は、このGhidraでMalware Techが公開しているCTFを解いていく。

www.malwaretech.com

まずは、[Hide and Seek]の

を解いていく。

 

下準備

まず、ghidraを立ち上げる。↓このような画面が出てくる。Tipsはcloseで消して、

Projectをstrings1という名前で作る。

f:id:QWERTYtan:20211202120937p:plain

すると、code browserが開く。

ghidraではここを使ってリバースエンジニアリングをしたものを見ていく。

f:id:QWERTYtan:20211202121500p:plain

この状態では、なんのプログラムを読み込んでいないため

左上の[File]→Import file→上でダウンロードしたstrings1.exe_を選択→AnalyseOK→Analyse→OK

で読み込む。

f:id:QWERTYtan:20211202121631p:plain

 

 

strings1.exe_

strings1.exe contains an un-encrypted flag stored within the executable. When run, the program will output an MD5 hash of the flag but not the original. Can you extract the flag?<https://www.malwaretech.com/challenges/windows-reversing/strings1抜粋>

 

ここから、MD5 hashでflagが書かれていることがわかる。

そのため、左のsymbol treeに関数がツリー状に書かれているのだが、ここの検索欄に

"hash"と入力する。(↓の黄色になっている部分)

すると、hashに関連する関数のみsymbol treeに表示される。

そこの md5_hashをクリックする。すると、真ん中のコード表示部分に青色でカバーがかかる。

ちなみに右には関数がある場合はその逆コンパイルしたものが書かれている。

そこから、下にしばらくスクロールしていくとflagが書かれている。

f:id:QWERTYtan:20211202120605p:plain

そのflagをさっきのサイトのflag提出欄にコピペして提出したら、success!と表示される。

f:id:QWERTYtan:20211202123039p:plain

 

 

string2.exe_

strings2.exe contains an un-encrypted flag stored within the executable. When run, the program will output an MD5 hash of the flag but not the original. Can you extract the flag?<https://www.malwaretech.com/challenges/windows-reversing/strings2抜粋>

 

string1.exe_と解き方は同じで、しかし今回はflagが16進数で書かれているので

それを16進数から文字にエンコードし直す必要がある。

f:id:QWERTYtan:20211202120702p:plain

f:id:QWERTYtan:20211202120738p:plain

flagのエンコードには、ここのサイトが役に立つ。

www.rapidtables.org

 

string3.exe_

strings3.exe contains an un-encrypted flag stored within the executable. When run, the program will output an MD5 hash of the flag but not the original. Can you extract the flag?<https://www.malwaretech.com/challenges/windows-reversing/strings3から抜粋>

 

ここまで、string1.exe_・string2.exe_と解いてて気づきましたか?

hash関数でflagが見つかりましたよね。

そこで、今回もhash*関数があるかなと思い検索してみると、ありません。

f:id:QWERTYtan:20211202142408p:plain

ここで、もう一つ気づきませんでしたか?

上まではhash*で検索していましたが、そのhash関数はentry関数の中で動いていますよね。

そこで、entry関数はないかなと思い検索しました。↓

f:id:QWERTYtan:20211202141428p:plain

すると、flagが見つかります。

f:id:QWERTYtan:20211202141514p:plain

 

次は、[Shellcode]分野のCTF

qwertytan.hatenablog.jp

Qt Creatorのバグの回避(Ubuntu 20.04)

Qt Creatorは、GUIアプリケーションをつくるソフトウェア。

だが、Ubuntu20.04でQt Creatorを実行すると、

Kits Selectionというプロジェクトを作成する際の設定から進めないバグが発生するため「Ubuntu Software」でも低評価とこれに関するレビュー祭り。 f:id:QWERTYtan:20211205202347p:plain 実際、「Ubuntu Software」からインストールしてもバグが発生して先に進めないので、ご注意を。

しかし、今回これを回避する方法を見つけたので、ここに書いていく。

Qt Creator・Qt共に何もインストールしていない状態から始める。
Ubuntu Software」からインストールしてしまっている場合は、「Ubuntu Software」内でアンインストールした状態から始めましょう。

まずは、ここで「オープンソース版をダウンロード」選択。 Downloadをクリック。

www.qt.io

ダウンロードされるのは.runなので、開く。
<ターミナル内でダウンロードしたフォルダに移動して>

chmod 777 ダウンロードした.run
./ダウンロードした.run

開く。 f:id:QWERTYtan:20211205203933p:plain アカウントを持っていない人はアカウント作成。
持っている人はログイン
あと、なぜか会社・学校のメールアドレスを聞かれるので、正直に入力。

Qt Creatorを選択し、ダウンロード。
かなり時間がかかるので待つ。

ダウンロード完了したら、Qt Creatorをクリックして開いてみましょう。
.
.
.
.
.
開きませんよね。。ここがこいつの最大の罠なんです。公式サイトから正式にダウンロードしたのに開かない。。
自分はこれで6時間くらい無駄にしました。
これをターミナルから開いてみると、

ImportError: libOpenGL.so.0: cannot open shared object file: No such file or directory

というエラーが出て終了してしまってます。
じゃあ、これを入れればいい。ということで、下のコマンドをターミナルで入力してください。

sudo apt install libopengl0 -y

すると、立ち上がるんですね。 f:id:QWERTYtan:20211205201256p:plain