Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
なぜマルウェア解析は自動化できないのか
Search
Yuma Kurogome
August 14, 2016
Programming
4.4k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
なぜマルウェア解析は自動化できないのか
セキュリティ・キャンプ全国大会2016 講義資料
Yuma Kurogome
August 14, 2016
More Decks by Yuma Kurogome
See All by Yuma Kurogome
The Art of De-obfuscation
ntddk
15
28k
死にゆくアンチウイルスへの祈り
ntddk
54
39k
Linear Obfuscation to Drive angr Angry
ntddk
4
930
Peeling Onions
ntddk
7
3.8k
仮想化技術を用いたマルウェア解析
ntddk
8
27k
An Introduction to Drawbridge(ja)
ntddk
10
3.5k
Other Decks in Programming
See All in Programming
自分的「カンファレンスの楽しみ方」
syumai
0
190
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
630
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
230
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
130
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
53
35k
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.4k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
260
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
150
業務時間外もAIに働いてもらう話
colorful12
3
9.9k
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
670
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
670
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
140
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
Designing for humans not robots
tammielis
254
26k
Music & Morning Musume
bryan
47
7.4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
190
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Paper Plane (Part 1)
katiecoart
PRO
1
10k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
How to build a perfect <img>
jonoalderson
1
6k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
420
Code Reviewing Like a Champion
maltzj
528
40k
Tell your own story through comics
letsgokoyo
1
1.1k
Transcript
None
None
None
None
None
• • • • • • • • • •
• • • •
• • • •
• • • • • • • • • •
• • • •
• • • • • • • • • •
• • •
None
• • • • • • • • • •
• • • • • • • • • • • • • • • • • • • •
• • • • • •
typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; ... DWORD SizeOfCode; //
コード全体のサイズ ... DWORD AddressOfEntryPoint; // エントリポイントのアドレス (RVA) DWORD BaseOfCode; // コード領域のベースアドレス (RVA) DWORD BaseOfData; // グローバル変数などの値が確定していないデータ領域のベースアドレス (RVA) DWORD ImageBase; // 仮想メモリにロードされるときの開始(ベース)アドレス // RVAはImageBaseのアドレスを引いた相対アドレス ... DWORD SizeOfImage; // メモリにロードされたときの全体サイズ DWORD SizeOfHeaders; ... IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; // インポート情報やエクスポート情報などへのアドレス (RVA) } IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;
None
• • • • • •
None
• • • • • • •
• • • • • • • •
• • • •
• MOV EBX, EAX ADD EAX, $0x4 … MOV EBX,
EAX ADD EAX, $0x4 … • • • mov_i32 ebx, eax movi_i32 tmp1, 0x4 add_i32 eax, tmp1 •
•
•
None
None
• • • • • • • • •
• • •
• • • • •
• • • • •
None
• • • • •
• • • • • •
• •
• • • • • • • •
from datetime import date from hashlib import sha256 def dyre_dga(num,
date_str=None): if None == date_str: date_str = '{0.year}-{0.month}-{0.day}'.format(date.today()) tlds = ['.cc', '.ws', '.to', '.in', '.hk', '.cn', '.tk', '.so'] hash = sha256('{0}{1}'.format(date_str, num)).hexdigest()[3:36] replace_char = chr(0xFF & ((num % 26) + 97)) return '{0}{1}{2}:443'.format(replace_char, hash, tlds[num % len(tlds)]) todays_domains = [dyre_dga(i) for i in xrange(333)]
• • • •
• •
• • •
None
None
• • • • • • • • •
• • • •
• •
cmp eax, 0x7E0 je 0xdeadbaad if(x!=2016) Invalid. ASSERT( INPUT_*_*_* =0hex7E0
); (a1 or !a2 or a3 … or an) and (b1 or b2 or !b3 … or !bn) and …
None
• •
•
None
• •
None
•
None
• • • • • •
• • •