Skip to content

Commit 47f81ac

Browse files
ukyclaude
authored andcommitted
fix: address review feedback — input validation + OPSEC flag semantics
- freq=0 panic: add clap value_parser range(1..) to all frequency CLI options (junk, pred, arith, reg-shuffle, stack-fake, instr-subst, inline, outline-min-block), preventing zero-division panics - obf-level range: add clap value_parser range(1..=4) so level=0 and level=5+ are rejected at CLI parse time - --obf-no-opsec semantics: now disables all three OPSEC sub-features (opsec + opsec_warn + opsec_strip) as a group, matching README intent - README: clarify primary target as x86-64 Linux (macOS best-effort) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent ee7a929 commit 47f81ac

File tree

2 files changed

+37
-35
lines changed

2 files changed

+37
-35
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ Source Code (.c)
319319
+----------+
320320
```
321321

322-
Target: x86-64 Linux/macOS (AT&T syntax).
322+
Primary target: **x86-64 Linux** (AT&T syntax). macOS (x86_64/Rosetta 2) is best-effort and not guaranteed.
323323

324324
---
325325

src/main.rs

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ struct Cli {
9090
obfuscate: bool,
9191

9292
/// 難読化レベル (1=軽量, 2=標準, 3=全パス有効, 4=最大)
93-
#[arg(long = "obf-level", default_value_t = 3)]
93+
#[arg(long = "obf-level", default_value_t = 3, value_parser = clap::value_parser!(u8).range(1..=4))]
9494
obf_level: u8,
9595

9696
/// CFF(制御フロー平坦化)を無効化
@@ -109,13 +109,13 @@ struct Cli {
109109
#[arg(long = "obf-no-indirect-calls")]
110110
obf_no_indirect_calls: bool,
111111

112-
/// ジャンクコード挿入頻度(N命令ごと)
113-
#[arg(long = "obf-junk-freq")]
114-
obf_junk_freq: Option<usize>,
112+
/// ジャンクコード挿入頻度(N命令ごと、1以上
113+
#[arg(long = "obf-junk-freq", value_parser = clap::value_parser!(u64).range(1..))]
114+
obf_junk_freq: Option<u64>,
115115

116-
/// 不透明述語頻度(N個の値生成命令ごと)
117-
#[arg(long = "obf-pred-freq")]
118-
obf_pred_freq: Option<usize>,
116+
/// 不透明述語頻度(N個の値生成命令ごと、1以上
117+
#[arg(long = "obf-pred-freq", value_parser = clap::value_parser!(u64).range(1..))]
118+
obf_pred_freq: Option<u64>,
119119

120120
/// 算術置換を無効化
121121
#[arg(long = "obf-no-arith-subst")]
@@ -161,33 +161,33 @@ struct Cli {
161161
#[arg(long = "obf-no-strip")]
162162
obf_no_strip: bool,
163163

164-
/// 算術置換頻度(N回に1回適用)
165-
#[arg(long = "obf-arith-freq")]
166-
obf_arith_freq: Option<usize>,
164+
/// 算術置換頻度(N回に1回適用、1以上
165+
#[arg(long = "obf-arith-freq", value_parser = clap::value_parser!(u64).range(1..))]
166+
obf_arith_freq: Option<u64>,
167167

168-
/// レジスタシャッフル頻度(N命令ごとに挿入)
169-
#[arg(long = "obf-reg-shuffle-freq")]
170-
obf_reg_shuffle_freq: Option<usize>,
168+
/// レジスタシャッフル頻度(N命令ごとに挿入、1以上
169+
#[arg(long = "obf-reg-shuffle-freq", value_parser = clap::value_parser!(u64).range(1..))]
170+
obf_reg_shuffle_freq: Option<u64>,
171171

172172
/// 偽スタックスロット数
173173
#[arg(long = "obf-stack-padding")]
174174
obf_stack_padding: Option<usize>,
175175

176-
/// 偽スタック操作の挿入頻度(N命令ごと)
177-
#[arg(long = "obf-stack-fake-freq")]
178-
obf_stack_fake_freq: Option<usize>,
176+
/// 偽スタック操作の挿入頻度(N命令ごと、1以上
177+
#[arg(long = "obf-stack-fake-freq", value_parser = clap::value_parser!(u64).range(1..))]
178+
obf_stack_fake_freq: Option<u64>,
179179

180-
/// 命令置換頻度(N命令ごと)
181-
#[arg(long = "obf-instr-subst-freq")]
182-
obf_instr_subst_freq: Option<usize>,
180+
/// 命令置換頻度(N命令ごと、1以上
181+
#[arg(long = "obf-instr-subst-freq", value_parser = clap::value_parser!(u64).range(1..))]
182+
obf_instr_subst_freq: Option<u64>,
183183

184-
/// インライン展開頻度(N回の適格呼び出しごとにインライン化)
185-
#[arg(long = "obf-inline-freq")]
186-
obf_inline_freq: Option<usize>,
184+
/// インライン展開頻度(N回の適格呼び出しごとにインライン化、1以上
185+
#[arg(long = "obf-inline-freq", value_parser = clap::value_parser!(u64).range(1..))]
186+
obf_inline_freq: Option<u64>,
187187

188-
/// アウトライン最小ブロックサイズ
189-
#[arg(long = "obf-outline-min-block")]
190-
obf_outline_min_block: Option<usize>,
188+
/// アウトライン最小ブロックサイズ(1以上)
189+
#[arg(long = "obf-outline-min-block", value_parser = clap::value_parser!(u64).range(1..))]
190+
obf_outline_min_block: Option<u64>,
191191

192192
/// Input C source file
193193
source: PathBuf,
@@ -256,6 +256,8 @@ fn main() {
256256
}
257257
if cli.obf_no_opsec {
258258
config.opsec = false;
259+
config.opsec_warn = false;
260+
config.opsec_strip = false;
259261
}
260262
if cli.obf_no_opsec_warn {
261263
config.opsec_warn = false;
@@ -264,33 +266,33 @@ fn main() {
264266
config.opsec_strip = false;
265267
}
266268

267-
// 頻度オーバーライド
269+
// 頻度オーバーライド(clap の value_parser で 1以上に制約済み)
268270
if let Some(freq) = cli.obf_junk_freq {
269-
config.junk_freq = freq;
271+
config.junk_freq = freq as usize;
270272
}
271273
if let Some(freq) = cli.obf_pred_freq {
272-
config.pred_freq = freq;
274+
config.pred_freq = freq as usize;
273275
}
274276
if let Some(freq) = cli.obf_arith_freq {
275-
config.arith_freq = freq;
277+
config.arith_freq = freq as usize;
276278
}
277279
if let Some(freq) = cli.obf_reg_shuffle_freq {
278-
config.reg_shuffle_freq = freq;
280+
config.reg_shuffle_freq = freq as usize;
279281
}
280282
if let Some(n) = cli.obf_stack_padding {
281283
config.stack_frame_padding = n;
282284
}
283285
if let Some(freq) = cli.obf_stack_fake_freq {
284-
config.stack_frame_fake_freq = freq;
286+
config.stack_frame_fake_freq = freq as usize;
285287
}
286288
if let Some(freq) = cli.obf_instr_subst_freq {
287-
config.instr_subst_freq = freq;
289+
config.instr_subst_freq = freq as usize;
288290
}
289291
if let Some(freq) = cli.obf_inline_freq {
290-
config.func_inline_freq = freq;
292+
config.func_inline_freq = freq as usize;
291293
}
292294
if let Some(n) = cli.obf_outline_min_block {
293-
config.func_outline_min_block = n;
295+
config.func_outline_min_block = n as usize;
294296
}
295297

296298
Some(config)

0 commit comments

Comments
 (0)