SlideShare a Scribd company logo
1 of 27
ret2dl_resolve
@fmrix0723
2021/5/12
Rits Security Team
1
はじめに
これまでに扱った問題では,libcのベースをリークし,その値にsystemの
オフセットを足すことで,system本体のアドレスを求めた
しかし,libcの詳細がわからない状態においては,systemのオフセットを
求めることができない
ret2dl_resolveと呼ばれる攻撃手法で解決する
ret2dl_resolve:遅延リンク時において名前解決対象シンボル名を特定す
る際の動作を利用することで,任意のライブラリ関数を呼び出す攻撃手法
2021/5/12
Rits Security Team
2
outline
1. ライブラリ関数が呼び出されるフロー
2. 名前解決時に使用される構造体について
3. 名前解決のフロー
4. ret2dl_resolvの概要
5. ret2dl_resolveの例
6. 演習
参考資料1 : ROP stager + Return-to-dl-resolveによるASLR+DEP回避 もも
いろテクノロジー
参考資料2 : Executable and Linkable Format 仕様書
2021/5/12
Rits Security Team
3
名前解決までの全体像 (再掲)
https://nuc13us.wordpress.com/2015/12/25/hack-using-global-offset-table/
2021/5/12
Rits Security Team
4
名前解決前 名前解決後
ライブラリ関数が呼び出されるフロー 1/2
2021/5/12
Rits Security Team
5
call func@plt
push *(0x8049ff8)
jmp *(0x8049ffc)
…
jmp *(0x804a00c)
push 0x18
jmp 0x8048300
• .got.pltを指す
• 初回は,次のアドレスを指す
• 名前解決された後は,func関数本体
のアドレスが入る
.pltの先頭を指す
.code
.plt
• reloc_offset(後述)
• _dl_runtime_resolve関数の第2引数
0x804a00c : 0x80483b0
.got.plt
push 0x18が
格納されてる
アドレス
ライブラリ関数が呼び出されるフロー 2/2
2021/5/12
Rits Security Team
6
call func@plt
push *(0x8049ff8)
jmp *(0x8049ffc)
…
jmp *(0x804a00c)
push 0x18
jmp 0x8048300
• _dl_runtime_resolve関数の第1引数
• 重要でない
• pltを使う全ての関数で共通
• _dl_runtime_resolve関数を指す
• _dl_runtime_resolveは名前解決を
行う関数である
.code
.plt
_dl_runtime_resolve(
0x18,
*(0x8049ff8)
)
libc
動的な名前解決に使用されるセクション
.rel.plt : 動的再配置に必要な構造体(Elf32_Rel)が含まれるリロケーション
テーブル
.dynsym : シンボル情報(Elf32_Sym)が含まれるシンボルテーブル
.dynstr : シンボル名が含まれるストリングステーブル
2021/5/12
Rits Security Team
7
.rel.plt
.dynsym
.dynstr
_dl_runtime_resolve()
引数などから対応す
るElf32_Relを特定
Elf32_Relから対応
するElf32_Symを
特定
Elf32_Symから
対応するシンボル
名を特定
Elf32_Rel
typedef struct {
Elf32_Addr r_offset; // その関数のGOTアドレスが格納される
Elf32_Word r_info; // シンボルテーブルにおけるインデックス
} Elf32_Rel;
2021/5/12
Rits Security Team
8
.rel.plt (リロケーションテーブル)に配列が存在する
各関数ごとに対応するElf32_Relが存在する
Elf32_Sym
typedef struct {
Elf32_Word st_name; // .dynstrにおける関数名へのオフセット
Elf32_Addr st_value; // 重要でない
Elf32_Word st_size; // 重要でない
unsigned char st_info; // シンボルの種類を示す
unsigned char st_other; // 重要でない
Elf32_Section st_shndx; // 重要でない
} Elf32_Sym;
2021/5/12
Rits Security Team
9
 .dynsym (シンボルテーブル)に配列が存在する
 各関数ごとに対応するElf32_Symが存在する
 .dynstr(ストリングステーブル)には,ここにエントリを持つ関数の関数名が格納されている
名前解決のフロー
1. .rel.pltのreloc_offset(=0x18)をオフセットとした位置にある
Elf32_Rel(relocとする)を見る
2. .dynsymにあるElf32_Symの配列において,((reloc->r_info)>>8)番
目の要素(symとする)を見る
3. .dynstr内の,sym->st_nameをオフセットとした場所にある文字列を
見る
4. その文字列を関数名として名前解決を行う (結局,black box)
5. 得られたアドレスを,reloc->r_offsetが差すGOTアドレスに格納する
6. 得られたアドレスにジャンプする
2021/5/12
Rits Security Team
10
名前解決のフロー
1. .rel.pltのreloc_offset(=0x18)をオフセットとした位置にある
Elf32_Rel(relocとする)を見る
2021/5/12
Rits Security Team
11
_dl_runtime_resolve(
link_map,
reloc_offset
)
.rel.plt
Elf32_Rel(relocとする)
reloc_offset
(=0x18) byte
名前解決のフロー
2. .dynsymにあるElf32_Symの配列において,((reloc->r_info)>>8)番
目の要素(symとする)を見る
2021/5/12
Rits Security Team
12
_dl_runtime_resolve(
link_map,
reloc_offset
)
.dynsym
Elf32_Sym[0]
reloc
reloc_offset
byte
.rel.plt
…
Elf32_Sym[(reloc->r_info)>>8]
(symとする)
…
名前解決のフロー
3. .dynstr内の,sym->st_nameをオフセットとした場所にある文字列を
見る
2021/5/12
Rits Security Team
13
_dl_runtime_resolve(
link_map,
reloc_offset
)
reloc
reloc_offset
byte
.rel.plt .dynsym
sym
(reloc->
r_info)>>8
.dynstr
“func”
sym->st_name
byte
名前解決のフロー
4. その文字列を関数名として名前解決を行う
2021/5/12
Rits Security Team
14
_dl_runtime_resolve(
link_map,
reloc_offset
)
reloc
reloc_offset
byte
.rel.plt .dynsym
sym
(reloc->
r_info)>>8
.dynstr
“func”
sym->st_name
byte
名前解決
名前解決のフロー
5. 得られたアドレスを,reloc->r_offsetが差すGOTアドレスに格納する
2021/5/12
Rits Security Team
15
_dl_runtime_resolve(
link_map,
reloc_offset
)
reloc
reloc_offset
byte
.rel.plt .dynsym
sym
(reloc->
r_info)>>8
.dynstr
“func”
sym->st_name
byte
名前解決
reloc->
r_offset:
.got
名前解決のフロー
6. 得られたアドレスにジャンプする
2021/5/12
Rits Security Team
16
_dl_runtime_resolve(
link_map,
reloc_offset
)
reloc
reloc_offset
byte
.rel.plt .dynsym
sym
(reloc->
r_info)>>8
libc
func:
名前解決
reloc->
r_offset:
.got
任意の関数の名前解決をさせる
reloc’やsym’などを自前で用意し,以下の変数を適当な値に設定すれば,
任意の関数の名前解決を実行させることができると考えられる
reloc_offset
reloc’ -> r_info >> 8
 sym’ -> st_name
2021/5/12
Rits Security Team
17
reloc‘
reloc_offset
byte
.rel.plt .dynsym
sym’
.dynstr
“system”
sym->st_name
byte
(reloc->
r_info)>>8
サニティチェック
_dl_runtime_resolve関数は,次の値をチェックし,場合によってはエラーとなる
sym -> st_info が 0x12 であること (シンボルがグローバル関数であるこ
とを示す)
→新たに用意するElf32_Symのst_infoを0x12に設定する
reloc -> r_info & 0xf が 7 であること (遅延リンクによるものであること
を示す)
→新たに用意するElf32_Relのr_infoの下位4ビットを,0111にする必要が
ある
→r_infoは右に8ビットシフトしてから使われるため,新たに用意する
Elf32_Symの位置はこれに関係しない
2021/5/12
Rits Security Team
18
題材
vuln
pivotのvulnと同じ問題
ただし,libcのバージョンはわからないものとする
2021/5/12
Rits Security Team
19
void vuln(void) {
char buff[16];
gets(buff);
puts(buff);
}
int main(void) {
vuln();
return 0;
}
ASLR : enable
canary : disable
NX bit : enable
PIE : disable
RELRO : partial
ret2dl_resolveの概要
1. vuln関数のリターンアドレスを書き換える
2. ret2pltによってgets関数を複数回呼び出し,次の情報を自前で用意する
 Elf32_Rel
 Elf32_Sym
 関数名
3. 最後に,reloc_offsetとsystemの引数をプッシュした状態で.pltの先頭
にジャンプする
2021/5/12
Rits Security Team
20
ret2dl_resolveの例
1. vuln関数のリターンアドレスを書き換える
2. ret2pltによって,gets関数を複数回呼び出す
2021/5/12
21
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
ret2dl_resolveの例
3. pivot先として偽pltを用意
2021/5/12
22
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
“AAAA”
.pltの先頭
reloc_offset’
“AAAA”
addr_arg
base_stage
• reloc_offset’ = addr_rel -
.rel.plt
• reloc_offset : Elf32_Relのオフ
セット
• addr_rel : この後,偽の
Elf32_Relが格納されるアドレス
• .rel.plt : .rel.plt セクションの
先頭アドレス
ret2dl_resolveの例
4. 偽のElf32_Relを用意する
2021/5/12
23
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
“AAAA”
.pltの先頭
reloc_offset’
“AAAA”
addr_arg
base_stage
.got for exit
r_info
addr_reloc
r_info=((addr_reloc - .dyn.sym)/0x10<<8) | 7
• r_info : Elf32_Symのインデックス
• addr_reloc : この後,偽のElf32_Symが格納され
るアドレス
• .dyn.sym : シンボルテーブルの先頭アドレス
• Elf32_Symのサイズは
0x10バイト
→インデックスのため0x10
で割る
• r_infoは,8ビット右シフト
してから使われる
→用意するときは,左に8ビッ
トシフトしておく
• r_infoの下位4ビットが
0111出ない場合_fix_up
でエラー
→7で論理和
ret2dl_resolveの例
5. 偽のElf32_Symを用意する
addr_symのオフセットは,0x10の倍数である必要がある(Elf32_Symのサイズが0x10)
2021/5/12
24
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
“AAAA”
.pltの先頭
reloc_offset’
“AAAA”
addr_arg
base_stage
.got for exit
r_info
addr_reloc
st_name
0
0
0x12
addr_sym
• st_name = addr_str - .dyn.str
• st_name : ストリングステーブルにおける対象
の関数名へのオフセット
• addr_str : この次に文字列”system”が格納され
るアドレス
• .dyn.str : ストリングステーブルの先頭アドレス
• 0x12 : _fix_up関数のサニティーチェック回避
ret2dl_resolveの例
6. 関数名と引数を用意する
2021/5/12
25
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
“AAAA”
.pltの先頭
reloc_offset’
“AAAA”
addr_arg
base_stage
.got for exit
r_info
addr_reloc
st_name
0
0
0x12
addr_sym
“system”
addr_str
“/bin/sh”
addr_arg
ret2dl_resolveの例
7. base_stageにstack pivot
2021/5/12
26
“AAAA”
.pltの先頭
reloc_offset’
“AAAA”
addr_arg
base_stage
.got for exit
r_info
addr_reloc
st_name
0
0
0x12
addr_sym
“system”
addr_str
“/bin/sh”
addr_arg
“AAAA”
gets(base_stage)
gets(addr_reloc)
gets(addr_sym)
gets(addr_str)
gets(addr_arg)
pivot to base_stage
演習
leakless
2021/5/12
Rits Security Team
27

More Related Content

What's hot

冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
Kumazaki Hiroki
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
Masakazu Asama
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
CODE BLUE
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 

What's hot (20)

ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
Advanced heap exploitaion
Advanced heap exploitaionAdvanced heap exploitaion
Advanced heap exploitaion
 
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
 
Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation Linux Binary Exploitation - Heap Exploitation
Linux Binary Exploitation - Heap Exploitation
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
Microblaze loader
Microblaze loaderMicroblaze loader
Microblaze loader
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Stack pivot
Stack pivotStack pivot
Stack pivot
 
Linux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingLinux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend Programing
 
Linux packet-forwarding
Linux packet-forwardingLinux packet-forwarding
Linux packet-forwarding
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
[CB16] House of Einherjar :GLIBC上の新たなヒープ活用テクニック by 松隈大樹
 
Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit Technique
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 

Similar to ret2dl resolve

Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
Takeru INOUE
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
Daiki Maekawa
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
akirahiguchi
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
Masanori Machii
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
Nanha Park
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
akirahiguchi
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
Masanori Kado
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
Insight Technology, Inc.
 

Similar to ret2dl resolve (20)

Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
Handlersocket 20110517
Handlersocket 20110517Handlersocket 20110517
Handlersocket 20110517
 
dm-thin-internal-ja
dm-thin-internal-jadm-thin-internal-ja
dm-thin-internal-ja
 
DeclarativeSql
DeclarativeSqlDeclarativeSql
DeclarativeSql
 
Statically detecting vulnerability under memory pressure using exhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive searchStatically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure using exhaustive search
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)第2回品川Redmine勉強会(日本語全文検索)
第2回品川Redmine勉強会(日本語全文検索)
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?Apache Hadoopの未来 3系になって何が変わるのか?
Apache Hadoopの未来 3系になって何が変わるのか?
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
 
C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努C16 45分でわかるPostgreSQLの仕組み by 山田努
C16 45分でわかるPostgreSQLの仕組み by 山田努
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
R新機能抄出
R新機能抄出R新機能抄出
R新機能抄出
 

More from sounakano (7)

Stager
StagerStager
Stager
 
ret2plt
ret2pltret2plt
ret2plt
 
ret2libc
ret2libcret2libc
ret2libc
 
Return Oriented Programming
Return Oriented ProgrammingReturn Oriented Programming
Return Oriented Programming
 
Linux Security
Linux SecurityLinux Security
Linux Security
 
Stack Buffer OverFlow
Stack Buffer OverFlowStack Buffer OverFlow
Stack Buffer OverFlow
 
ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介ARMアーキテクチャにおけるセキュリティ機構の紹介
ARMアーキテクチャにおけるセキュリティ機構の紹介
 

Recently uploaded

Recently uploaded (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

ret2dl resolve