opencode-skills-collection 4.0.43 → 4.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +47 -1
  2. package/bundled-skills/api-rate-limit-handler/SKILL.md +282 -0
  3. package/bundled-skills/api-security/SKILL.md +205 -0
  4. package/bundled-skills/api-security/references/jwt-oauth-testing.md +123 -0
  5. package/bundled-skills/api-security/references/rest-graphql-testing.md +137 -0
  6. package/bundled-skills/apk-reverse/SKILL.md +438 -0
  7. package/bundled-skills/apk-reverse/references/android-advanced.md +365 -0
  8. package/bundled-skills/apk-reverse/references/apk-security-checklist.md +230 -0
  9. package/bundled-skills/apk-reverse/references/frida-bypass-kit.md +70 -0
  10. package/bundled-skills/apk-reverse/references/frida-cookbook.md +472 -0
  11. package/bundled-skills/attack-chain/SKILL.md +185 -0
  12. package/bundled-skills/attack-chain/references/attack-playbooks.md +126 -0
  13. package/bundled-skills/attack-chain/references/evasion-cheatsheet.md +133 -0
  14. package/bundled-skills/attack-chain/references/lifecycle-checklist.md +37 -0
  15. package/bundled-skills/attack-chain/references/phases.md +490 -0
  16. package/bundled-skills/binary-diff/SKILL.md +320 -0
  17. package/bundled-skills/binary-diff/references/prompt-template.md +173 -0
  18. package/bundled-skills/browser-extension-reverse/SKILL.md +99 -0
  19. package/bundled-skills/browser-extension-reverse/references/extension-analysis.md +10 -0
  20. package/bundled-skills/case-review/SKILL.md +167 -0
  21. package/bundled-skills/cloud-k8s/SKILL.md +124 -0
  22. package/bundled-skills/cloud-k8s/references/k8s-cloud-checklist.md +16 -0
  23. package/bundled-skills/code-audit/SKILL.md +92 -0
  24. package/bundled-skills/code-audit/references/sast-review-checklist.md +10 -0
  25. package/bundled-skills/database-security/SKILL.md +81 -0
  26. package/bundled-skills/database-security/references/db-misconfig-checklist.md +9 -0
  27. package/bundled-skills/diagram-generator/SKILL.md +199 -0
  28. package/bundled-skills/diagram-generator/references/README.md +3 -0
  29. package/bundled-skills/diagram-generator/references/diagram-patterns.md +254 -0
  30. package/bundled-skills/digital-forensics/SKILL.md +93 -0
  31. package/bundled-skills/digital-forensics/references/forensics-triage.md +10 -0
  32. package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
  33. package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
  34. package/bundled-skills/docs/maintainers/repo-growth-seo.md +1 -1
  35. package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
  36. package/bundled-skills/docs/sources/sources.md +9 -0
  37. package/bundled-skills/docs/users/aas-core.md +1 -1
  38. package/bundled-skills/docs/users/bundles.md +1 -1
  39. package/bundled-skills/docs/users/claude-code-skills.md +1 -1
  40. package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
  41. package/bundled-skills/docs/users/kiro-integration.md +1 -1
  42. package/bundled-skills/docs/users/usage.md +3 -3
  43. package/bundled-skills/docs/users/visual-guide.md +4 -4
  44. package/bundled-skills/docs-generator/SKILL.md +197 -0
  45. package/bundled-skills/docs-generator/references/security-report-templates.md +348 -0
  46. package/bundled-skills/docs-generator/references/templates.md +102 -0
  47. package/bundled-skills/docs-generator/references/vendor-report-rules.md +263 -0
  48. package/bundled-skills/dotnet-reverse/SKILL.md +197 -0
  49. package/bundled-skills/dotnet-reverse/references/common-workflow.md +171 -0
  50. package/bundled-skills/dotnet-reverse/references/obfuscators.md +145 -0
  51. package/bundled-skills/dotnet-reverse/references/sharp-tools.md +164 -0
  52. package/bundled-skills/edr-bypass-re/SKILL.md +248 -0
  53. package/bundled-skills/edr-bypass-re/references/hook-survey.md +226 -0
  54. package/bundled-skills/edr-bypass-re/references/telemetry-blinding.md +346 -0
  55. package/bundled-skills/edr-bypass-re/references/unhook-techniques.md +338 -0
  56. package/bundled-skills/email-security/SKILL.md +81 -0
  57. package/bundled-skills/email-security/references/email-auth-checklist.md +8 -0
  58. package/bundled-skills/firmware-pentest/SKILL.md +381 -0
  59. package/bundled-skills/firmware-pentest/references/emba-automated-analysis.md +192 -0
  60. package/bundled-skills/firmware-pentest/references/emulation-and-fuzz.md +337 -0
  61. package/bundled-skills/firmware-pentest/references/extraction-methodology.md +285 -0
  62. package/bundled-skills/ghidra-reverse/SKILL.md +98 -0
  63. package/bundled-skills/ghidra-reverse/references/ghidra-cheatsheet.md +12 -0
  64. package/bundled-skills/go-rust-reverse/SKILL.md +82 -0
  65. package/bundled-skills/go-rust-reverse/references/go-rust-notes.md +5 -0
  66. package/bundled-skills/hardware-security/SKILL.md +80 -0
  67. package/bundled-skills/hardware-security/references/debug-interface-triage.md +7 -0
  68. package/bundled-skills/ida-reverse/SKILL.md +401 -0
  69. package/bundled-skills/ida-reverse/references/LOCAL-SETUP.md +66 -0
  70. package/bundled-skills/ida-reverse/references/ida-mcp-cheatsheet.md +515 -0
  71. package/bundled-skills/identity-federation/SKILL.md +81 -0
  72. package/bundled-skills/identity-federation/references/sso-flow-checklist.md +9 -0
  73. package/bundled-skills/instructree/SKILL.md +94 -0
  74. package/bundled-skills/js-reverse/SKILL.md +239 -0
  75. package/bundled-skills/js-reverse/references/ast-deobfuscation.md +3 -0
  76. package/bundled-skills/js-reverse/references/automation-entry.md +12 -0
  77. package/bundled-skills/js-reverse/references/env-patching.md +6 -0
  78. package/bundled-skills/js-reverse/references/fallbacks.md +8 -0
  79. package/bundled-skills/js-reverse/references/instrumentation.md +9 -0
  80. package/bundled-skills/js-reverse/references/local-rebuild.md +11 -0
  81. package/bundled-skills/js-reverse/references/mcp-task-template.md +30 -0
  82. package/bundled-skills/js-reverse/references/node-env-rebuild.md +9 -0
  83. package/bundled-skills/js-reverse/references/output-contract.md +9 -0
  84. package/bundled-skills/js-reverse/references/task-artifacts.md +11 -0
  85. package/bundled-skills/js-reverse/references/task-input-template.md +11 -0
  86. package/bundled-skills/js-reverse/references/tool-defaults.md +7 -0
  87. package/bundled-skills/llm-security/SKILL.md +160 -0
  88. package/bundled-skills/llm-security/references/agent-obedience-engineering.md +243 -0
  89. package/bundled-skills/llm-security/references/agent-security-testing.md +116 -0
  90. package/bundled-skills/llm-security/references/owasp-llm-top10.md +48 -0
  91. package/bundled-skills/llm-security/references/prompt-injection-methodology.md +107 -0
  92. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package-lock.json +4 -4
  93. package/bundled-skills/loki-mode/examples/todo-app-generated/backend/package.json +1 -1
  94. package/bundled-skills/macos-reverse/SKILL.md +85 -0
  95. package/bundled-skills/macos-reverse/references/macho-triage.md +10 -0
  96. package/bundled-skills/malware-analysis/SKILL.md +311 -0
  97. package/bundled-skills/malware-analysis/references/anti-analysis-techniques.md +205 -0
  98. package/bundled-skills/malware-analysis/references/sandbox-orchestration.md +204 -0
  99. package/bundled-skills/malware-analysis/references/yara-sigma-rules.md +232 -0
  100. package/bundled-skills/mobile-reverse/SKILL.md +222 -0
  101. package/bundled-skills/mobile-reverse/references/anti-detection-bypass.md +182 -0
  102. package/bundled-skills/mobile-reverse/references/frida-objection-deep.md +218 -0
  103. package/bundled-skills/mobile-reverse/references/ios-reverse-guide.md +177 -0
  104. package/bundled-skills/muapi-media/SKILL.md +311 -0
  105. package/bundled-skills/ot-ics/SKILL.md +117 -0
  106. package/bundled-skills/ot-ics/references/ot-safe-assessment.md +10 -0
  107. package/bundled-skills/patch-diff-exploit/SKILL.md +278 -0
  108. package/bundled-skills/patch-diff-exploit/references/diff-tools-comparison.md +271 -0
  109. package/bundled-skills/patch-diff-exploit/references/patch-tuesday-workflow.md +253 -0
  110. package/bundled-skills/patch-diff-exploit/references/root-cause-and-poc.md +198 -0
  111. package/bundled-skills/pentest-tools/SKILL.md +346 -0
  112. package/bundled-skills/pentest-tools/references/ai-pentest-agents.md +148 -0
  113. package/bundled-skills/pentest-tools/references/ai-pentesting-landscape-2026.md +73 -0
  114. package/bundled-skills/pentest-tools/references/automation-loop-pattern.md +153 -0
  115. package/bundled-skills/pentest-tools/references/awesome-pentest-digest.md +175 -0
  116. package/bundled-skills/pentest-tools/references/burpsuite-mcp-guide.md +769 -0
  117. package/bundled-skills/pentest-tools/references/client-side-lab-playbook.md +155 -0
  118. package/bundled-skills/pentest-tools/references/kali-mcp-ecosystem.md +119 -0
  119. package/bundled-skills/pentest-tools/references/msf-protocol.md +169 -0
  120. package/bundled-skills/pentest-tools/references/network-attack-defense.md +350 -0
  121. package/bundled-skills/pentest-tools/references/nuclei-guide-2026.md +157 -0
  122. package/bundled-skills/pentest-tools/references/payloads.md +32 -0
  123. package/bundled-skills/pentest-tools/references/pentest-ai-agents-matrix.md +117 -0
  124. package/bundled-skills/pentest-tools/references/pentest-loop.md +270 -0
  125. package/bundled-skills/pentest-tools/references/recon-pipeline.md +154 -0
  126. package/bundled-skills/pentest-tools/references/templates/findings.md +21 -0
  127. package/bundled-skills/pentest-tools/references/templates/progress.md +17 -0
  128. package/bundled-skills/pentest-tools/references/templates/rules.md +35 -0
  129. package/bundled-skills/pentest-tools/references/templates/scope.md +29 -0
  130. package/bundled-skills/pentest-tools/references/templates/task_plan.md +27 -0
  131. package/bundled-skills/pentest-tools/references/web-attack-cheatsheet.md +387 -0
  132. package/bundled-skills/pentest-tools/src-hunter/SKILL.md +243 -0
  133. package/bundled-skills/pentest-tools/src-hunter/references/README.en.md +115 -0
  134. package/bundled-skills/pentest-tools/src-hunter/references/README.md +148 -0
  135. package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/00-index.md +44 -0
  136. package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/chinese-srcfingerprints.md +515 -0
  137. package/bundled-skills/pentest-tools/src-hunter/references/dictionaries/default-credentials-cn.md +274 -0
  138. package/bundled-skills/pentest-tools/src-hunter/references/industry/00-index.md +66 -0
  139. package/bundled-skills/pentest-tools/src-hunter/references/industry/banking-finance.md +338 -0
  140. package/bundled-skills/pentest-tools/src-hunter/references/industry/telecom-isp.md +315 -0
  141. package/bundled-skills/pentest-tools/src-hunter/references/methodology/00-index.md +68 -0
  142. package/bundled-skills/pentest-tools/src-hunter/references/methodology/01-attack-priority.md +143 -0
  143. package/bundled-skills/pentest-tools/src-hunter/references/methodology/02-bypass-toolkit.md +357 -0
  144. package/bundled-skills/pentest-tools/src-hunter/references/methodology/03-evidence-discipline.md +205 -0
  145. package/bundled-skills/pentest-tools/src-hunter/references/methodology/04-control-gap-hunting.md +238 -0
  146. package/bundled-skills/pentest-tools/src-hunter/references/methodology/05-srctimebox-priority.md +161 -0
  147. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/adcs/346/224/273/345/207/273.md +254 -0
  148. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/exchange/346/224/273/345/207/273.md +254 -0
  149. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet/sharepoint/346/224/273/345/207/273.md +113 -0
  150. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//344/277/241/346/201/257/346/224/266/351/233/206.md +947 -0
  151. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/205/215/346/235/200/344/270/216/350/247/204/351/201/277.md +780 -0
  152. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/207/255/350/257/201/347/252/203/345/217/226.md +1259 -0
  153. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//345/237/237/346/270/227/351/200/217/346/224/273/345/207/273.md +753 -0
  154. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/235/203/351/231/220/346/217/220/345/215/207.md +819 -0
  155. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/235/203/351/231/220/347/273/264/346/214/201.md +577 -0
  156. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//346/250/252/345/220/221/347/247/273/345/212/250.md +838 -0
  157. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/intranet//351/232/247/351/201/223/344/273/243/347/220/206.md +604 -0
  158. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ai/345/256/211/345/205/250.md +698 -0
  159. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/api/345/256/211/345/205/250.md +1935 -0
  160. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/csrf/350/267/250/347/253/231/350/257/267/346/261/202/344/274/252/351/200/240.md +952 -0
  161. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/jwt/345/256/211/345/205/250.md +496 -0
  162. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/lfi-rfi/346/226/207/344/273/266/345/214/205/345/220/253.md +1365 -0
  163. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/rce/350/277/234/347/250/213/344/273/243/347/240/201/346/211/247/350/241/214.md +1329 -0
  164. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/sql-nosql/346/263/250/345/205/245.md +1924 -0
  165. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ssrf/346/234/215/345/212/241/347/253/257/350/257/267/346/261/202/344/274/252/351/200/240.md +1256 -0
  166. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/ssti/346/250/241/346/235/277/346/263/250/345/205/245.md +1151 -0
  167. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/websocket/345/256/211/345/205/250.md +487 -0
  168. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/xss/350/267/250/347/253/231/350/204/232/346/234/254.md +1465 -0
  169. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web/xxe/345/256/236/344/275/223/346/263/250/345/205/245.md +815 -0
  170. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/270/232/345/212/241/351/200/273/350/276/221/346/274/217/346/264/236.md +594 -0
  171. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/272/221/345/256/211/345/205/250/346/274/217/346/264/236.md +561 -0
  172. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//344/276/233/345/272/224/351/223/276/346/224/273/345/207/273.md +399 -0
  173. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//345/216/237/345/236/213/351/223/276/346/261/241/346/237/223.md +401 -0
  174. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//345/274/200/346/224/276/351/207/215/345/256/232/345/220/221.md +396 -0
  175. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//346/226/207/344/273/266/346/274/217/346/264/236.md +0 -0
  176. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//346/241/206/346/236/266/346/274/217/346/264/236.md +2304 -0
  177. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//347/202/271/345/207/273/345/212/253/346/214/201.md +339 -0
  178. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//347/274/223/345/255/230/344/270/216cdn/345/256/211/345/205/250.md +497 -0
  179. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//350/256/244/350/257/201/346/274/217/346/264/236.md +1778 -0
  180. package/bundled-skills/pentest-tools/src-hunter/references/payloader/by-category/web//350/257/267/346/261/202/350/265/260/347/247/201.md +854 -0
  181. package/bundled-skills/pentest-tools/src-hunter/references/payloader/index.md +69 -0
  182. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools/web/346/270/227/351/200/217.md +662 -0
  183. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools/windows/346/270/227/351/200/217.md +100 -0
  184. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//344/277/241/346/201/257/346/224/266/351/233/206.md +852 -0
  185. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/206/205/347/275/221/346/270/227/351/200/217.md +873 -0
  186. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/207/255/350/257/201/347/252/203/345/217/226.md +186 -0
  187. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/237/237/346/270/227/351/200/217.md +50 -0
  188. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//345/257/206/347/240/201/346/224/273/345/207/273.md +462 -0
  189. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//346/235/203/351/231/220/346/217/220/345/215/207.md +168 -0
  190. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//346/274/217/346/264/236/345/210/251/347/224/250.md +445 -0
  191. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/263/273/347/273/237/345/221/275/344/273/244.md +410 -0
  192. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/272/242/351/230/237/345/267/245/345/205/267.md +64 -0
  193. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//347/274/226/347/240/201/350/247/243/347/240/201.md +226 -0
  194. package/bundled-skills/pentest-tools/src-hunter/references/payloader/tools//351/232/247/351/201/223/344/273/243/347/220/206.md +84 -0
  195. package/bundled-skills/pentest-tools/src-hunter/references/payloader/waf-bypass.md +6504 -0
  196. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/00-index.md +57 -0
  197. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/api-rest.md +2050 -0
  198. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/arbitrary-x-authz.md +481 -0
  199. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/dos.md +615 -0
  200. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/file-upload.md +1365 -0
  201. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/graphql.md +253 -0
  202. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/http-smuggling.md +924 -0
  203. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/info-disclosure.md +432 -0
  204. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/intranet-postexp.md +4845 -0
  205. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/llm-prompt-injection.md +1394 -0
  206. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/logic-flaws.md +1796 -0
  207. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/mobile.md +397 -0
  208. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/oauth-saml-jwt.md +2504 -0
  209. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/path-traversal.md +1297 -0
  210. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/race-conditions.md +207 -0
  211. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/rce.md +4829 -0
  212. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/sqli.md +1620 -0
  213. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/ssrf-cache-host.md +2098 -0
  214. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/unauth-access.md +330 -0
  215. package/bundled-skills/pentest-tools/src-hunter/references/playbooks/xss.md +1159 -0
  216. package/bundled-skills/pentest-tools/src-hunter/references/templates/report-submission.md +346 -0
  217. package/bundled-skills/pentest-tools/src-hunter/references/tools/mcp-jshook.md +174 -0
  218. package/bundled-skills/protocol-reverse/SKILL.md +108 -0
  219. package/bundled-skills/protocol-reverse/references/protocol-workflow.md +29 -0
  220. package/bundled-skills/pwn-chain/SKILL.md +209 -0
  221. package/bundled-skills/pwn-chain/references/heap-pwn.md +283 -0
  222. package/bundled-skills/pwn-chain/references/kernel-pwn.md +370 -0
  223. package/bundled-skills/pwn-chain/references/stack-pwn.md +312 -0
  224. package/bundled-skills/radare2/SKILL.md +460 -0
  225. package/bundled-skills/radare2/references/cheatsheet.md +129 -0
  226. package/bundled-skills/radio-sdr/SKILL.md +77 -0
  227. package/bundled-skills/radio-sdr/references/sdr-lab-rules.md +6 -0
  228. package/bundled-skills/reverse-browser-automation/SKILL.md +249 -0
  229. package/bundled-skills/reverse-browser-automation/references/playwright-cheatsheet.md +425 -0
  230. package/bundled-skills/reverse-engineering/SKILL.md +213 -0
  231. package/bundled-skills/reverse-engineering/dsl-vm-reverse/SKILL.md +388 -0
  232. package/bundled-skills/reverse-engineering/references/ai-assisted-re.md +149 -0
  233. package/bundled-skills/reverse-engineering/references/anti-analysis.md +836 -0
  234. package/bundled-skills/reverse-engineering/references/awesome-re-resources.md +135 -0
  235. package/bundled-skills/reverse-engineering/references/crypto-decode-tools.md +220 -0
  236. package/bundled-skills/reverse-engineering/references/elf-analysis.md +296 -0
  237. package/bundled-skills/reverse-engineering/references/field-notes.md +540 -0
  238. package/bundled-skills/reverse-engineering/references/go-reverse.md +240 -0
  239. package/bundled-skills/reverse-engineering/references/kernel-driver-reverse.md +298 -0
  240. package/bundled-skills/reverse-engineering/references/languages-compiled.md +587 -0
  241. package/bundled-skills/reverse-engineering/references/languages-platforms.md +486 -0
  242. package/bundled-skills/reverse-engineering/references/languages.md +499 -0
  243. package/bundled-skills/reverse-engineering/references/nonpe-format-cookbook.md +301 -0
  244. package/bundled-skills/reverse-engineering/references/ollvm-deobfuscation.md +501 -0
  245. package/bundled-skills/reverse-engineering/references/patterns-ctf-2.md +397 -0
  246. package/bundled-skills/reverse-engineering/references/patterns-ctf-3.md +719 -0
  247. package/bundled-skills/reverse-engineering/references/patterns-ctf.md +532 -0
  248. package/bundled-skills/reverse-engineering/references/patterns.md +801 -0
  249. package/bundled-skills/reverse-engineering/references/platforms-hardware.md +304 -0
  250. package/bundled-skills/reverse-engineering/references/platforms.md +442 -0
  251. package/bundled-skills/reverse-engineering/references/re-agent-workflow.md +240 -0
  252. package/bundled-skills/reverse-engineering/references/tools-advanced.md +822 -0
  253. package/bundled-skills/reverse-engineering/references/tools-dynamic.md +846 -0
  254. package/bundled-skills/reverse-engineering/references/tools.md +546 -0
  255. package/bundled-skills/supply-chain-security/SKILL.md +180 -0
  256. package/bundled-skills/supply-chain-security/references/cicd-pipeline-security.md +137 -0
  257. package/bundled-skills/supply-chain-security/references/sbom-sca-methodology.md +74 -0
  258. package/bundled-skills/thick-client/SKILL.md +104 -0
  259. package/bundled-skills/thick-client/references/thick-client-checklist.md +9 -0
  260. package/bundled-skills/threat-hunting/SKILL.md +94 -0
  261. package/bundled-skills/threat-hunting/references/hunting-loop.md +5 -0
  262. package/bundled-skills/threat-intelligence/SKILL.md +176 -0
  263. package/bundled-skills/threat-intelligence/references/x-public-intelligence.md +93 -0
  264. package/bundled-skills/tree-ring-memory/SKILL.md +29 -9
  265. package/bundled-skills/wifi-wireless/SKILL.md +80 -0
  266. package/bundled-skills/wifi-wireless/references/wireless-lab-rules.md +6 -0
  267. package/bundled-skills/windows-ad/SKILL.md +109 -0
  268. package/bundled-skills/windows-ad/references/ad-attack-paths.md +12 -0
  269. package/package.json +1 -1
  270. package/skills_index.json +1214 -2
@@ -0,0 +1,836 @@
1
+ # CTF Reverse - Anti-Analysis Techniques & Bypasses
2
+
3
+ Comprehensive reference for anti-debugging, anti-VM, anti-DBI, and integrity-check techniques encountered in CTF challenges, with practical bypasses.
4
+
5
+ ## Table of Contents
6
+ - [Linux Anti-Debug (Advanced)](#linux-anti-debug-advanced)
7
+ - [ptrace-Based](#ptrace-based)
8
+ - [/proc Filesystem Checks](#proc-filesystem-checks)
9
+ - [Timing-Based Detection](#timing-based-detection)
10
+ - [Signal-Based Anti-Debug](#signal-based-anti-debug)
11
+ - [Syscall-Level Evasion](#syscall-level-evasion)
12
+ - [Windows Anti-Debug (Advanced)](#windows-anti-debug-advanced)
13
+ - [PEB (Process Environment Block) Checks](#peb-process-environment-block-checks)
14
+ - [NtQueryInformationProcess](#ntqueryinformationprocess)
15
+ - [Heap Flags](#heap-flags)
16
+ - [TLS Callbacks](#tls-callbacks)
17
+ - [Hardware Breakpoint Detection](#hardware-breakpoint-detection)
18
+ - [Software Breakpoint Detection (INT3 Scanning)](#software-breakpoint-detection-int3-scanning)
19
+ - [Exception-Based Anti-Debug](#exception-based-anti-debug)
20
+ - [NtSetInformationThread (Thread Hiding)](#ntsetinformationthread-thread-hiding)
21
+ - [Anti-VM / Anti-Sandbox](#anti-vm--anti-sandbox)
22
+ - [CPUID Hypervisor Bit](#cpuid-hypervisor-bit)
23
+ - [MAC Address / Hardware Fingerprinting](#mac-address--hardware-fingerprinting)
24
+ - [Timing-Based VM Detection](#timing-based-vm-detection)
25
+ - [File / Registry Artifacts](#file--registry-artifacts)
26
+ - [Resource Checks (CPU Count, RAM, Disk)](#resource-checks-cpu-count-ram-disk)
27
+ - [Anti-DBI (Dynamic Binary Instrumentation)](#anti-dbi-dynamic-binary-instrumentation)
28
+ - [Frida Detection](#frida-detection)
29
+ - [Pin/DynamoRIO Detection](#pindynamorio-detection)
30
+ - [Code Integrity / Self-Hashing](#code-integrity--self-hashing)
31
+ - [Anti-Disassembly Techniques](#anti-disassembly-techniques)
32
+ - [Opaque Predicates](#opaque-predicates)
33
+ - [Junk Bytes / Overlapping Instructions](#junk-bytes--overlapping-instructions)
34
+ - [Jump-in-the-Middle](#jump-in-the-middle)
35
+ - [Function Chunking / Scattered Code](#function-chunking--scattered-code)
36
+ - [Control Flow Flattening (Advanced)](#control-flow-flattening-advanced)
37
+ - [Mixed Boolean-Arithmetic (MBA) Identification & Simplification](#mixed-boolean-arithmetic-mba-identification--simplification)
38
+ - [SIGILL Handler for Execution Mode Switching (Hack.lu 2015)](#sigill-handler-for-execution-mode-switching-hacklu-2015)
39
+ - [SIGFPE Signal Handler Side-Channel via strace Counting (PlaidCTF 2017)](#sigfpe-signal-handler-side-channel-via-strace-counting-plaidctf-2017)
40
+ - [Instruction Trace Inversion with Keystone and Unicorn (MeePwn CTF 2017)](#instruction-trace-inversion-with-keystone-and-unicorn-meepwn-ctf-2017)
41
+ - [Call-less Function Chaining via Stack Frame Manipulation (THC CTF 2018)](#call-less-function-chaining-via-stack-frame-manipulation-thc-ctf-2018)
42
+ - [Comprehensive Bypass Strategies](#comprehensive-bypass-strategies)
43
+ - [Universal Bypass Checklist](#universal-bypass-checklist)
44
+ - [Layered Anti-Debug (Real-World Pattern)](#layered-anti-debug-real-world-pattern)
45
+ - [Quick Reference: Check to Bypass](#quick-reference-check-to-bypass)
46
+
47
+ ---
48
+
49
+ ## Linux Anti-Debug (Advanced)
50
+
51
+ ### ptrace-Based
52
+
53
+ **Self-ptrace (most common):**
54
+ ```c
55
+ if (ptrace(PTRACE_TRACEME, 0, 0, 0) == -1) exit(1); // Already traced = debugger attached
56
+ ```
57
+
58
+ **Bypasses:**
59
+ ```bash
60
+ # 1. LD_PRELOAD (see patterns.md for full hook)
61
+ LD_PRELOAD=./hook.so ./binary
62
+
63
+ # 2. Patch with pwntools
64
+ python3 -c "
65
+ from pwn import *
66
+ elf = ELF('./binary', checksec=False)
67
+ elf.asm(elf.symbols.ptrace, 'xor eax, eax; ret')
68
+ elf.save('patched')
69
+ "
70
+
71
+ # 3. GDB: catch the syscall
72
+ gdb ./binary
73
+ (gdb) catch syscall ptrace
74
+ (gdb) run
75
+ # When it stops at ptrace:
76
+ (gdb) set $rax = 0
77
+ (gdb) continue
78
+
79
+ # 4. Kernel config (requires root)
80
+ echo 0 > /proc/sys/kernel/yama/ptrace_scope
81
+ ```
82
+
83
+ **Double-ptrace pattern:**
84
+ ```c
85
+ // Fork child to ptrace parent — blocks all other debuggers
86
+ pid_t child = fork();
87
+ if (child == 0) {
88
+ ptrace(PTRACE_ATTACH, getppid(), 0, 0);
89
+ // Child sits in waitpid loop, keeping parent traced
90
+ } else {
91
+ // Parent continues with real logic
92
+ }
93
+ ```
94
+ **Bypass:** Kill the watchdog child process, then attach debugger.
95
+
96
+ ### /proc Filesystem Checks
97
+
98
+ ```c
99
+ // TracerPid check
100
+ FILE *f = fopen("/proc/self/status", "r");
101
+ // Looks for "TracerPid:\t0" — non-zero means debugger
102
+
103
+ // /proc/self/exe link check (some debuggers change this)
104
+ readlink("/proc/self/exe", buf, sizeof(buf));
105
+
106
+ // /proc/self/maps — check for debugger libraries
107
+ grep("frida", "/proc/self/maps");
108
+ ```
109
+
110
+ **Bypasses:**
111
+ ```bash
112
+ # 1. LD_PRELOAD fopen/fread to fake /proc contents
113
+ # 2. Mount namespace isolation
114
+ unshare -m bash -c 'mount --bind /dev/null /proc/self/status && ./binary'
115
+
116
+ # 3. GDB: set breakpoint at fopen, change filename argument
117
+ (gdb) b fopen
118
+ (gdb) run
119
+ (gdb) set {char[20]} $rdi = "/dev/null"
120
+ (gdb) continue
121
+ ```
122
+
123
+ ### Timing-Based Detection
124
+
125
+ ```c
126
+ // rdtsc (CPU timestamp counter)
127
+ uint64_t start = __rdtsc();
128
+ // ... code ...
129
+ uint64_t delta = __rdtsc() - start;
130
+ if (delta > THRESHOLD) exit(1); // too slow = debugger
131
+
132
+ // clock_gettime
133
+ struct timespec ts1, ts2;
134
+ clock_gettime(CLOCK_MONOTONIC, &ts1);
135
+ // ... code ...
136
+ clock_gettime(CLOCK_MONOTONIC, &ts2);
137
+
138
+ // gettimeofday
139
+ struct timeval tv1, tv2;
140
+ gettimeofday(&tv1, NULL);
141
+ ```
142
+
143
+ **Bypasses:**
144
+ ```bash
145
+ # 1. Frida hook (see tools-dynamic.md for clock_gettime hook)
146
+
147
+ # 2. GDB: skip rdtsc by patching with constant
148
+ (gdb) set {unsigned char[2]} 0x401234 = {0x90, 0x90} # NOP the rdtsc
149
+
150
+ # 3. Pin tool to fix TSC reads
151
+ # 4. faketime library
152
+ LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 FAKETIME="2024-01-01" ./binary
153
+ ```
154
+
155
+ ### Signal-Based Anti-Debug
156
+
157
+ ```c
158
+ // SIGTRAP handler — INT3 under debugger is caught by debugger, not handler
159
+ signal(SIGTRAP, handler);
160
+ __asm__("int3");
161
+ // If handler runs: no debugger. If debugger catches: debugged.
162
+
163
+ // SIGALRM timeout — kill self if analysis takes too long
164
+ signal(SIGALRM, kill_handler);
165
+ alarm(5);
166
+
167
+ // SIGSEGV handler that does real work (see patterns.md for MBA pattern)
168
+ signal(SIGSEGV, real_logic_handler);
169
+ *(int*)0 = 0; // deliberate crash → handler runs real code
170
+ ```
171
+
172
+ **Bypasses:**
173
+ ```bash
174
+ # GDB: pass signals to program instead of handling them
175
+ (gdb) handle SIGTRAP nostop pass
176
+ (gdb) handle SIGALRM ignore
177
+ (gdb) handle SIGSEGV nostop pass
178
+
179
+ # For alarm-based: patch alarm() to return immediately
180
+ ```
181
+
182
+ ### Syscall-Level Evasion
183
+
184
+ ```c
185
+ // Direct syscall instead of libc — bypasses LD_PRELOAD hooks
186
+ long ret;
187
+ asm volatile("syscall" : "=a"(ret) : "a"(101), "D"(0), "S"(0), "d"(0), "r"(0));
188
+ // Syscall 101 = ptrace on x86_64
189
+ ```
190
+
191
+ **Bypass:** Must patch the binary itself or use ptrace to intercept at syscall level.
192
+ ```bash
193
+ # GDB: catch syscall
194
+ (gdb) catch syscall 101
195
+ (gdb) commands
196
+ > set $rax = 0
197
+ > continue
198
+ > end
199
+ ```
200
+
201
+ ---
202
+
203
+ ## Windows Anti-Debug (Advanced)
204
+
205
+ ### PEB (Process Environment Block) Checks
206
+
207
+ ```c
208
+ // BeingDebugged flag (offset 0x2 in PEB)
209
+ bool debugged = NtCurrentPeb()->BeingDebugged;
210
+
211
+ // NtGlobalFlag (offset 0x68/0xBC in PEB)
212
+ // When debugger: FLG_HEAP_ENABLE_TAIL_CHECK | FLG_HEAP_ENABLE_FREE_CHECK | FLG_HEAP_VALIDATE_PARAMETERS = 0x70
213
+ DWORD flags = *(DWORD*)((BYTE*)NtCurrentPeb() + 0xBC); // 64-bit offset
214
+ if (flags & 0x70) exit(1);
215
+ ```
216
+
217
+ **Bypass (x64dbg):**
218
+ ```text
219
+ # ScyllaHide plugin auto-patches PEB fields
220
+ # Manual: dump PEB, zero BeingDebugged and NtGlobalFlag
221
+ ```
222
+
223
+ ### NtQueryInformationProcess
224
+
225
+ ```c
226
+ // ProcessDebugPort (0x7)
227
+ DWORD_PTR debugPort = 0;
228
+ NtQueryInformationProcess(GetCurrentProcess(), 7, &debugPort, sizeof(debugPort), NULL);
229
+ if (debugPort != 0) exit(1);
230
+
231
+ // ProcessDebugObjectHandle (0x1E)
232
+ HANDLE debugObj = NULL;
233
+ NTSTATUS status = NtQueryInformationProcess(GetCurrentProcess(), 0x1E, &debugObj, sizeof(debugObj), NULL);
234
+ if (status == 0) exit(1); // STATUS_SUCCESS means debugger present
235
+
236
+ // ProcessDebugFlags (0x1F) — returns inverse: 0 = debugger present
237
+ DWORD noDebug = 0;
238
+ NtQueryInformationProcess(GetCurrentProcess(), 0x1F, &noDebug, sizeof(noDebug), NULL);
239
+ if (noDebug == 0) exit(1);
240
+ ```
241
+
242
+ **Bypass:** Hook `NtQueryInformationProcess` to return fake values, or use ScyllaHide.
243
+
244
+ ### Heap Flags
245
+
246
+ ```c
247
+ // Process heap has debug flags when debugger attached
248
+ PHEAP heap = (PHEAP)GetProcessHeap();
249
+ // Flags at offset 0x70 (64-bit): should be HEAP_GROWABLE (0x2)
250
+ // ForceFlags at offset 0x74: should be 0
251
+ if (heap->Flags != 0x2 || heap->ForceFlags != 0) exit(1);
252
+ ```
253
+
254
+ ### TLS Callbacks
255
+
256
+ **Key technique:** TLS (Thread Local Storage) callbacks execute BEFORE `main()` / entry point.
257
+
258
+ ```c
259
+ // Registered in PE header's TLS directory
260
+ void NTAPI TlsCallback(PVOID DllHandle, DWORD Reason, PVOID Reserved) {
261
+ if (Reason == DLL_PROCESS_ATTACH) {
262
+ if (IsDebuggerPresent()) {
263
+ ExitProcess(1); // Kills process before main runs
264
+ }
265
+ }
266
+ }
267
+
268
+ #pragma comment(linker, "/INCLUDE:_tls_used")
269
+ #pragma data_seg(".CRT$XLB")
270
+ PIMAGE_TLS_CALLBACK callbacks[] = { TlsCallback, NULL };
271
+ ```
272
+
273
+ **Detection in IDA/Ghidra:** Check PE TLS Directory → AddressOfCallBacks. Functions listed there run before EP.
274
+
275
+ **Bypass:** Set breakpoint on TLS callback in x64dbg (Options → Events → TLS Callbacks), or patch the TLS directory entry.
276
+
277
+ ### Hardware Breakpoint Detection
278
+
279
+ ```c
280
+ // Read debug registers via GetThreadContext
281
+ CONTEXT ctx;
282
+ ctx.ContextFlags = CONTEXT_DEBUG_REGISTERS;
283
+ GetThreadContext(GetCurrentThread(), &ctx);
284
+ if (ctx.Dr0 || ctx.Dr1 || ctx.Dr2 || ctx.Dr3) exit(1);
285
+
286
+ // Also via exception handler: deliberate exception, check DR regs in handler
287
+ ```
288
+
289
+ **Bypass:**
290
+ ```bash
291
+ # x64dbg: use software breakpoints instead, or hook GetThreadContext
292
+ # Frida: hook GetThreadContext to zero DR registers
293
+ ```
294
+
295
+ ### Software Breakpoint Detection (INT3 Scanning)
296
+
297
+ ```c
298
+ // CRC / hash check over code section
299
+ unsigned char *code = (unsigned char*)function_addr;
300
+ uint32_t checksum = 0;
301
+ for (int i = 0; i < code_size; i++) {
302
+ checksum += code[i];
303
+ if (code[i] == 0xCC) exit(1); // INT3 = software breakpoint
304
+ }
305
+ if (checksum != EXPECTED_CHECKSUM) exit(1);
306
+ ```
307
+
308
+ **Bypass:** Use hardware breakpoints (DR0-DR3) instead of software breakpoints. Or hook the scanning function.
309
+
310
+ ### Exception-Based Anti-Debug
311
+
312
+ ```c
313
+ // UnhandledExceptionFilter — under debugger, filter is NOT called
314
+ SetUnhandledExceptionFilter(handler);
315
+ RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, NULL);
316
+ // If handler runs: no debugger
317
+ // If debugger catches: debugger present
318
+
319
+ // INT 2D — debugger single-step anomaly
320
+ __asm { int 2dh } // Debugger silently consumes the exception
321
+ // If execution continues: debugger present
322
+ ```
323
+
324
+ ### NtSetInformationThread (Thread Hiding)
325
+
326
+ ```c
327
+ // Hide thread from debugger — stops all debug events
328
+ typedef NTSTATUS(NTAPI *pNtSIT)(HANDLE, ULONG, PVOID, ULONG);
329
+ pNtSIT NtSIT = (pNtSIT)GetProcAddress(GetModuleHandle("ntdll"), "NtSetInformationThread");
330
+ NtSIT(GetCurrentThread(), 0x11 /*ThreadHideFromDebugger*/, NULL, 0);
331
+ // After this, debugger won't see breakpoints or exceptions from this thread
332
+ ```
333
+
334
+ **Bypass:** Hook `NtSetInformationThread` to ignore class 0x11, or patch the call.
335
+
336
+ ---
337
+
338
+ ## Anti-VM / Anti-Sandbox
339
+
340
+ ### CPUID Hypervisor Bit
341
+
342
+ ```c
343
+ int regs[4];
344
+ __cpuid(regs, 1);
345
+ if (regs[2] & (1 << 31)) { // ECX bit 31 = hypervisor present
346
+ exit(1);
347
+ }
348
+
349
+ // Hypervisor brand string
350
+ __cpuid(regs, 0x40000000);
351
+ char brand[13] = {0};
352
+ memcpy(brand, &regs[1], 12);
353
+ // "VMwareVMware", "Microsoft Hv", "KVMKVMKVM", "XenVMMXenVMM"
354
+ ```
355
+
356
+ **Bypass:** Patch `cpuid` results or use `LD_PRELOAD` to hook wrapper functions.
357
+
358
+ ### MAC Address / Hardware Fingerprinting
359
+
360
+ ```text
361
+ Known VM MAC prefixes:
362
+ VMware: 00:0C:29, 00:50:56
363
+ VirtualBox: 08:00:27
364
+ Hyper-V: 00:15:5D
365
+ Parallels: 00:1C:42
366
+ QEMU: 52:54:00
367
+ ```
368
+
369
+ ### Timing-Based VM Detection
370
+
371
+ ```c
372
+ // VM exits on privileged instructions are measurably slower
373
+ uint64_t start = __rdtsc();
374
+ __cpuid(regs, 0); // Forces VM exit
375
+ uint64_t delta = __rdtsc() - start;
376
+ if (delta > 500) { /* likely VM */ }
377
+ ```
378
+
379
+ ### File / Registry Artifacts
380
+
381
+ ```text
382
+ Files: C:\Windows\System32\drivers\vm*.sys, vbox*.dll, VBoxService.exe
383
+ Registry: HKLM\SOFTWARE\VMware, Inc.\VMware Tools
384
+ Services: VMTools, VBoxService
385
+ Processes: vmtoolsd.exe, VBoxTray.exe, qemu-ga.exe
386
+ Linux: /sys/class/dmi/id/product_name contains "VirtualBox"|"VMware"
387
+ dmesg | grep -i "hypervisor detected"
388
+ ```
389
+
390
+ ### Resource Checks (CPU Count, RAM, Disk)
391
+
392
+ ```c
393
+ // Sandboxes typically have minimal resources
394
+ SYSTEM_INFO si;
395
+ GetSystemInfo(&si);
396
+ if (si.dwNumberOfProcessors < 2) exit(1);
397
+
398
+ MEMORYSTATUSEX ms;
399
+ ms.dwLength = sizeof(ms);
400
+ GlobalMemoryStatusEx(&ms);
401
+ if (ms.ullTotalPhys < 2ULL * 1024 * 1024 * 1024) exit(1); // < 2GB RAM
402
+
403
+ // Disk size check (< 60GB = sandbox)
404
+ GetDiskFreeSpaceEx("C:\\", NULL, &total, NULL);
405
+ ```
406
+
407
+ **Bypass:** Use a VM configured with adequate resources (4+ CPUs, 8GB+ RAM, 100GB+ disk).
408
+
409
+ ---
410
+
411
+ ## Anti-DBI (Dynamic Binary Instrumentation)
412
+
413
+ ### Frida Detection
414
+
415
+ ```c
416
+ // 1. Check /proc/self/maps for frida-agent
417
+ FILE *f = fopen("/proc/self/maps", "r");
418
+ while (fgets(line, sizeof(line), f)) {
419
+ if (strstr(line, "frida") || strstr(line, "gadget")) exit(1);
420
+ }
421
+
422
+ // 2. Check for Frida's default port (27042)
423
+ int sock = socket(AF_INET, SOCK_STREAM, 0);
424
+ struct sockaddr_in addr = {.sin_family=AF_INET, .sin_port=htons(27042), .sin_addr.s_addr=inet_addr("127.0.0.1")};
425
+ if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0) exit(1);
426
+
427
+ // 3. Check for inline hooks (function prologue modification)
428
+ // Compare first bytes of libc functions against expected values
429
+ unsigned char *strcmp_bytes = (unsigned char *)strcmp;
430
+ if (strcmp_bytes[0] == 0xE9 || strcmp_bytes[0] == 0xFF) exit(1); // JMP = hooked
431
+
432
+ // 4. Thread name check
433
+ // Frida creates threads with names like "gmain", "gdbus", "frida-*"
434
+ DIR *dir = opendir("/proc/self/task");
435
+ while ((entry = readdir(dir))) {
436
+ char comm_path[256];
437
+ snprintf(comm_path, sizeof(comm_path), "/proc/self/task/%s/comm", entry->d_name);
438
+ // Read comm and check for "gmain", "gdbus"
439
+ }
440
+
441
+ // 5. Named pipe detection (Windows)
442
+ // Frida creates \\.\pipe\frida-* named pipes
443
+ ```
444
+
445
+ **Frida bypass of Frida detection:**
446
+ ```javascript
447
+ // Hook the detection functions themselves
448
+ Interceptor.attach(Module.findExportByName(null, "strstr"), {
449
+ onEnter(args) {
450
+ this.haystack = Memory.readUtf8String(args[0]);
451
+ this.needle = Memory.readUtf8String(args[1]);
452
+ },
453
+ onLeave(retval) {
454
+ if (this.needle && (this.needle.includes("frida") || this.needle.includes("gadget"))) {
455
+ retval.replace(ptr(0)); // Not found
456
+ }
457
+ }
458
+ });
459
+
460
+ // Early Frida load (before anti-DBI runs)
461
+ // Use frida-gadget as early-init shared library
462
+ ```
463
+
464
+ ### Pin/DynamoRIO Detection
465
+
466
+ ```c
467
+ // Check for instrumentation libraries in /proc/self/maps
468
+ // Pin: "pin-", "pinbin", "pinatrace"
469
+ // DynamoRIO: "dynamorio", "drcov", "drrun"
470
+
471
+ // Instruction count timing — DBI adds overhead
472
+ // Execute known instruction sequence, compare execution time
473
+ ```
474
+
475
+ ---
476
+
477
+ ## Code Integrity / Self-Hashing
478
+
479
+ ```c
480
+ // CRC32 over .text section
481
+ uint32_t crc = compute_crc32(text_start, text_size);
482
+ if (crc != EXPECTED_CRC) exit(1); // Code was modified (breakpoints, patches)
483
+
484
+ // MD5/SHA256 of function bodies
485
+ unsigned char hash[32];
486
+ SHA256(function_addr, function_size, hash);
487
+ if (memcmp(hash, expected_hash, 32) != 0) exit(1);
488
+ ```
489
+
490
+ **Bypasses:**
491
+ 1. **Hardware breakpoints** (don't modify code, DR0-DR3)
492
+ 2. **Patch the comparison** to always succeed
493
+ 3. **Hook the hash function** to return expected value
494
+ 4. **Emulate** instead of debug (Unicorn/Qiling — no code modification)
495
+ 5. **Snapshot + restore:** dump memory before and after, diff to find checks
496
+
497
+ **Self-checksumming in loops:**
498
+ ```c
499
+ // Continuous integrity check in separate thread
500
+ void *watchdog(void *arg) {
501
+ while (1) {
502
+ if (compute_crc32(text_start, text_end - text_start) != saved_crc) {
503
+ memset(flag_buffer, 0, flag_len); // Destroy flag
504
+ exit(1);
505
+ }
506
+ usleep(100000);
507
+ }
508
+ }
509
+ ```
510
+ **Bypass:** Kill the watchdog thread or patch its sleep to infinite.
511
+
512
+ ---
513
+
514
+ ## Anti-Disassembly Techniques
515
+
516
+ ### Opaque Predicates
517
+
518
+ ```asm
519
+ ; Condition that always evaluates the same way but looks data-dependent
520
+ mov eax, [some_memory]
521
+ imul eax, eax ; x^2
522
+ and eax, 1 ; x^2 mod 2 is always 0 for any x
523
+ jnz fake_branch ; Never taken, but disassembler doesn't know
524
+ ; real code here
525
+ ```
526
+
527
+ **Identification:** Z3/SMT can prove branch is always/never taken.
528
+
529
+ ### Junk Bytes / Overlapping Instructions
530
+
531
+ ```asm
532
+ jmp real_code
533
+ db 0xE8 ; Looks like start of CALL to linear disassembler
534
+ real_code:
535
+ mov eax, 1 ; Real code — disassembler may misalign here
536
+ ```
537
+
538
+ **Fix:** Switch to graph-mode disassembly (Ghidra/IDA handle this well). Manual: undefine and re-analyze from correct offset.
539
+
540
+ ### Jump-in-the-Middle
541
+
542
+ ```asm
543
+ ; Jumps into the middle of a multi-byte instruction
544
+ eb 01 ; jmp +1 (skip next byte)
545
+ e8 ; fake CALL opcode — disassembler tries to decode as call
546
+ 90 ; real: NOP (landed here from jmp)
547
+ ```
548
+
549
+ ### Function Chunking / Scattered Code
550
+
551
+ Functions split into non-contiguous chunks connected by unconditional jumps. Defeats linear function boundary detection.
552
+
553
+ **Tool:** IDA's "Append function tail" or Ghidra's "Create function" at each chunk.
554
+
555
+ ### Control Flow Flattening (Advanced)
556
+
557
+ > 完整的 OLLVM 脱密工作流、变种生态(Hikari/Polaris/O-MVLL/Tigress/Hodur 等)和社区工具调研见 [ollvm-deobfuscation.md](references/ollvm-deobfuscation.md)。
558
+
559
+ Beyond basic switch-case (see patterns.md): modern OLLVM variants use:
560
+ - **Bogus control flow:** Fake branches with opaque predicates
561
+ - **Instruction substitution:** `a + b` → `a - (-b)`, `a ^ b` → `(a | b) & ~(a & b)`
562
+ - **String encryption:** Strings decrypted at runtime, cleared after use
563
+
564
+ **现代变种(2026 社区活跃):** Hikari (Anti Class Dump/String Encryption/Indirect Branch), Polaris (原 Pluto, 含 Trap Angr 专门坑 angr), O-MVLL (Python 驱动, Android 加固常用), Arkari (goron 基础, 间接跳转可被数据段只读对抗), amice (Rust, 含 VM Flatten 需 VM 逆向而非 deflat)。变种识别详见 ollvm-deobfuscation.md 第 1 节。
565
+
566
+ **Deobfuscation tools (社区活跃度排序):**
567
+ - **obpo-plugin** (629⭐, IDA microcode+concolic 云插件, 效果最强): https://github.com/obpo-project/obpo-plugin
568
+ - **ollvm-breaker** (441⭐, Binary Ninja, Android .so 实战): https://github.com/amimo/ollvm-breaker
569
+ - **ollvm-unflattener** (265⭐, Miasm 符号执行, 纯脚本 x86/x64): https://github.com/cdong1012/ollvm-unflattener
570
+ - **d810-ng** (223⭐, IDA, 集成 Z3, 覆盖 OLLVM/Tigress/Hodur/Approov): https://github.com/w00tzenheimer/d810-ng — **本地首选**
571
+ - **DeObfBR** (96⭐, BR 间接分支混淆专项): https://github.com/Mrack/DeObfBR
572
+ - **D-810** (原版, 已较少维护, 建议用 d810-ng): pattern-based deobfuscation, MBA simplification
573
+ - **Miasm**: Symbolic execution for deobfuscation
574
+ - **Arybo** / **SiMBA**: MBA expression simplification
575
+
576
+ ```bash
577
+ # d810-ng: 复制到 IDA plugins 目录, Ctrl-Shift-D 加载
578
+ # 选择 Unflattener + MBA simplification + Opaque predicate removal
579
+ # obpo: 右键 dispatcher → OBPO → Mark and process function (需联网)
580
+ # ⚠️ Pluto/Polaris 的 Trap Angr pass 会让 angr 失效 → 改用 d810-ng/Unicorn
581
+ ```
582
+
583
+ ### Mixed Boolean-Arithmetic (MBA) Identification & Simplification
584
+
585
+ ```python
586
+ # Common MBA patterns and their simplified forms:
587
+ # (x & y) + (x | y) == x + y
588
+ # (x ^ y) + 2*(x & y) == x + y
589
+ # (x | y) - (x & ~y) == y
590
+ # ~(~x & ~y) == x | y (De Morgan's)
591
+ # (x | y) & ~(x & y) == x ^ y
592
+
593
+ # SiMBA tool for automated simplification:
594
+ # pip install simba-simplifier
595
+ from simba import simplify_mba
596
+ expr = "(a | b) + (a & b) - (~a & b)"
597
+ print(simplify_mba(expr)) # → a
598
+ ```
599
+
600
+ ---
601
+
602
+ ## SIGILL Handler for Execution Mode Switching (Hack.lu 2015)
603
+
604
+ Binaries may install SIGILL (illegal instruction) handlers to switch between x86 and x86-64 execution modes or implement custom opcode dispatch:
605
+
606
+ 1. **Signal registration:** `signal(SIGILL, handler)` installs a callback for illegal instruction exceptions
607
+ 2. **Mode switching:** The handler modifies the saved instruction pointer or segment registers to switch between 32-bit and 64-bit code
608
+ 3. **Custom opcodes:** Invalid x86 instructions trigger the handler, which interprets operand bytes as custom VM opcodes
609
+
610
+ ```c
611
+ // Signal handler decodes "illegal" instructions as custom opcodes
612
+ void sigill_handler(int sig, siginfo_t *info, void *ucontext) {
613
+ ucontext_t *ctx = (ucontext_t *)ucontext;
614
+ unsigned char *pc = (unsigned char *)ctx->uc_mcontext.gregs[REG_RIP];
615
+ // Decode custom opcode from bytes at PC
616
+ // Advance PC past the custom instruction
617
+ ctx->uc_mcontext.gregs[REG_RIP] += opcode_length;
618
+ }
619
+ ```
620
+
621
+ **Key insight:** If a binary installs signal handlers for SIGILL/SIGSEGV/SIGTRAP early in execution, suspect custom instruction dispatch. Trace signal deliveries with `strace -e signal` or set GDB to not intercept: `handle SIGILL nostop pass`.
622
+
623
+ ---
624
+
625
+ ## SIGFPE Signal Handler Side-Channel via strace Counting (PlaidCTF 2017)
626
+
627
+ Binary uses SIGFPE signal handlers for control flow, making static analysis unreliable. Brute-force by counting SIGFPE signals via strace — correct input characters produce more signals.
628
+
629
+ ```bash
630
+ # Count SIGFPE signals per input character guess
631
+ for c in {a..z} {A..Z} {0..9}; do
632
+ count=$(echo -n "${c}AAAAAAA" | strace -e signal=SIGFPE ./binary 2>&1 | grep -c SIGFPE)
633
+ echo "$c: $count"
634
+ done
635
+ # Character producing the most SIGFPEs is correct
636
+ # Repeat for each position, extending the known prefix
637
+ ```
638
+
639
+ **Key insight:** Signal handlers (SIGFPE, SIGSEGV, SIGILL) create implicit control flow invisible to static analysis. The number of signals raised correlates with validation progress. Counting signals via `strace -e signal=SIGFPE` turns opaque signal-based validation into a measurable side-channel for character-by-character brute-force.
640
+
641
+ ---
642
+
643
+ ## Instruction Trace Inversion with Keystone and Unicorn (MeePwn CTF 2017)
644
+
645
+ UPX-packed binary applies a sequence of arithmetic-only transforms (sub, add, xor, rol, ror) to the flag. No memory side-effects — purely register arithmetic. IDAPython traces non-jump instructions, the sequence is then inverted to recover the flag.
646
+
647
+ **Inversion rules:**
648
+ - Reverse the instruction sequence (last instruction first)
649
+ - Swap inverse pairs: `add ↔ sub`, `rol ↔ ror`, `xor` is self-inverse
650
+
651
+ ```python
652
+ # IDAPython: collect non-jump instructions in the obfuscated routine
653
+ import idaapi, idc
654
+
655
+ def trace_transforms(start_ea, end_ea):
656
+ instructions = []
657
+ ea = start_ea
658
+ while ea < end_ea:
659
+ mnem = idc.print_insn_mnem(ea)
660
+ if mnem not in ('jmp', 'je', 'jne', 'call', 'ret'):
661
+ instructions.append((ea, mnem, idc.print_operands(ea)))
662
+ ea = idc.next_head(ea)
663
+ return instructions
664
+
665
+ transforms = trace_transforms(0x401000, 0x401200)
666
+
667
+ # Invert: reverse order, swap add/sub and rol/ror
668
+ inverse_map = {'add': 'sub', 'sub': 'add', 'rol': 'ror', 'ror': 'rol', 'xor': 'xor'}
669
+ inverted = [(mnem, op) for (_, mnem, op) in reversed(transforms)]
670
+ inverted = [(inverse_map.get(m, m), op) for m, op in inverted]
671
+ ```
672
+
673
+ ```python
674
+ # Assemble inverted instructions with Keystone, emulate with Unicorn
675
+ from keystone import *
676
+ from unicorn import *
677
+ from unicorn.x86_const import *
678
+
679
+ ks = Ks(KS_ARCH_X86, KS_MODE_64)
680
+ uc = Uc(UC_ARCH_X86, UC_MODE_64)
681
+
682
+ asm_src = '\n'.join(f'{mnem} {op}' for mnem, op in inverted)
683
+ encoding, _ = ks.asm(asm_src)
684
+
685
+ CODE_BASE = 0x400000
686
+ uc.mem_map(CODE_BASE, 0x10000)
687
+ uc.mem_write(CODE_BASE, bytes(encoding))
688
+
689
+ # Set initial register state to the observed output value
690
+ uc.reg_write(UC_X86_REG_RAX, known_output)
691
+ uc.emu_start(CODE_BASE, CODE_BASE + len(encoding))
692
+ flag_bytes = uc.reg_read(UC_X86_REG_RAX).to_bytes(8, 'little')
693
+ ```
694
+
695
+ **PEB anti-debug note:** If the binary reads `PEB.BeingDebugged` and uses it to select between two comparison target values, the traced instructions under IDAPython may use the debug-mode target. Patch `BeingDebugged` to 0 before tracing, or identify both branches and use the non-debug target value.
696
+
697
+ **Key insight:** Arithmetic-only obfuscation (no memory writes) is fully reversible by tracing, inverting the instruction sequence, and swapping inverse operations. PEB anti-debug can silently change comparison targets — always verify which branch is taken.
698
+
699
+ **References:** MeePwn CTF 2017
700
+
701
+ ---
702
+
703
+ ### Call-less Function Chaining via Stack Frame Manipulation (THC CTF 2018)
704
+
705
+ **Pattern:** Binary hides function calls by building a linked list of function pointers on the stack, then modifying saved RBP and return addresses so `leave; ret` instructions chain through the list without any explicit `CALL` instructions. IDA fails to decompile because push/pop are unbalanced and function boundaries cannot be determined.
706
+
707
+ Each function in the chain:
708
+ 1. Pushes operands and the next function's address onto the stack
709
+ 2. Sets saved RBP to point to the next stack frame
710
+ 3. Sets the return address to the next function
711
+ 4. `leave` restores RSP from RBP (moving to next frame), `ret` jumps to the next function
712
+
713
+ ```python
714
+ # Reversed processing chain (each function applied via leave/ret):
715
+ def reverse_processing(byte):
716
+ res = byte | 0x80 # OR 0x80
717
+ res = res ^ 0xCA # XOR 0xCA
718
+ res = (res + 66) & 0xFF # ADD 66
719
+ res = res ^ 0xCA # XOR 0xCA (repeated)
720
+ res = (res + 66) & 0xFF
721
+ res = res ^ 0xCA
722
+ res = (res + 66) & 0xFF
723
+ res = res ^ 0xFE # XOR 0xFE (final)
724
+ return res
725
+ # Apply in reverse order, then reverse the character sequence
726
+ ```
727
+
728
+ **Key insight:** By manipulating saved RBP to point to the next stack frame and saved RIP to the next function, `leave; ret` chains through functions without any `call` instructions. Disassemblers that track call/ret balance fail to identify function boundaries. Patch each function body individually for IDA to handle them.
729
+
730
+ **Detection:** Binary with many small code blocks ending in `leave; ret` but no corresponding `call` instructions. Stack contains interleaved function pointers and data. IDA shows "stack frame is too big" or fails to create functions.
731
+
732
+ **References:** THC CTF 2018
733
+
734
+ ---
735
+
736
+ ## Comprehensive Bypass Strategies
737
+
738
+ ### Universal Bypass Checklist
739
+
740
+ 1. **Identify all anti-analysis checks** — search for: `ptrace`, `IsDebuggerPresent`, `rdtsc`, `cpuid`, `NtQuery`, `GetTickCount`, `CheckRemoteDebuggerPresent`, `/proc/self`, `SIGTRAP`, `alarm`
741
+ 2. **Static patching** — NOP/patch checks with pwntools or Ghidra before running
742
+ 3. **LD_PRELOAD** (Linux) — hook libc functions returning fake values
743
+ 4. **ScyllaHide** (Windows x64dbg) — patches PEB, hooks NT functions automatically
744
+ 5. **Emulation** (Unicorn/Qiling) — no debugger artifacts to detect
745
+ 6. **Kernel-level bypass** — modify `/proc/sys/kernel/yama/ptrace_scope`, use `prctl`
746
+
747
+ ### Layered Anti-Debug (Real-World Pattern)
748
+
749
+ Many CTF challenges stack multiple checks:
750
+ ```text
751
+ 1. TLS callback → IsDebuggerPresent (before main)
752
+ 2. main() → ptrace(TRACEME)
753
+ 3. Watchdog thread → timing check + /proc scan
754
+ 4. Code section → self-CRC32 integrity
755
+ 5. Signal handler → real logic in SIGSEGV handler
756
+ ```
757
+
758
+ **Approach:** Identify ALL checks before patching. Patch or hook each one systematically. Run under emulator if too many to patch individually.
759
+
760
+ ### Quick Reference: Check to Bypass
761
+
762
+ | Anti-Debug Check | Platform | Bypass |
763
+ |---|---|---|
764
+ | `ptrace(TRACEME)` | Linux | `LD_PRELOAD`, patch to `ret 0`, `catch syscall` |
765
+ | `IsDebuggerPresent` | Windows | ScyllaHide, Frida hook, PEB patch |
766
+ | `NtQueryInformationProcess` | Windows | ScyllaHide, hook ntdll |
767
+ | `rdtsc` timing | Both | NOP rdtsc, Frida time hook, Pin |
768
+ | `/proc/self/status` | Linux | Mount namespace, hook fopen |
769
+ | `alarm(N)` | Linux | `handle SIGALRM ignore` in GDB |
770
+ | `SIGTRAP` handler | Linux | `handle SIGTRAP nostop pass` |
771
+ | `SIGFPE` handler side-channel | Linux | `strace -e signal=SIGFPE` count per input |
772
+ | TLS callback | Windows | Break on TLS in x64dbg, patch |
773
+ | DR register scan | Windows | Use software BPs, hook GetThreadContext |
774
+ | INT3 scan / CRC | Both | Hardware BPs, patch CRC comparison |
775
+ | Frida detection | Both | Early-load gadget, hook strstr |
776
+ | CPUID hypervisor | Both | Patch CPUID result, bare metal |
777
+ | Thread hiding | Windows | Hook NtSetInformationThread |
778
+
779
+
780
+ ---
781
+
782
+ ## Agent 响应菜谱 A–T(Issue #65)
783
+
784
+ > 检测类长文仍见 `malware-analysis/references/anti-analysis-techniques.md`;OLLVM 长流程见 `references/ollvm-deobfuscation.md`。
785
+ > 本节是 **触发 → 动作 → Evidence** 短菜谱,供 agent 在 Dynamic/Static 旁路选用。
786
+ > **授权隔离 lab 默认**;静态 patch / 改 PEB / 改返回值不是未授权目标上的默认动作。
787
+
788
+ ### 使用规则
789
+
790
+ 1. 先 **识别并记录** 检测点(地址/API/字符串),再决定绕过或换环境。
791
+ 2. 绕过尝试(成功或失败)MUST 写 Evidence;禁止把反调试退出写成「样本无害」。
792
+ 3. H/S 不在此展开长文 → 跳转 OLLVM 专章。
793
+ 4. L 仅 Linux/ELF 强制;Windows PE 主路径不因缺 TracerPid 判失败。
794
+ 5. E 的 VT 对照为 **可选**;无外部情报源时写 n/a,不编造首次提交时间。
795
+
796
+ ### 全表 A–T
797
+
798
+ | ID | 触发 | 处理动作 | Evidence | 优先级 |
799
+ |----|------|----------|----------|--------|
800
+ | **A** | `cpuid` 后条件跳(jz/jnz) | 识别 hypervisor 检测;lab 改标志位或 patch 跳转走恶意/真实业务分支;或换物理机 | `E-anti-debug-cpuid` | P0 |
801
+ | **B** | `rdtsc` + sub/cmp 时间差 | bp `rdtsc` / hook 时间 API;或 patch 比较;避免只靠「等沙箱超时」 | `E-anti-debug-rdtsc` | P0 |
802
+ | **C** | 字符串含 x64dbg/olly/windbg 等,或 Toolhelp 枚举 | bp `CreateToolhelp32Snapshot`→`Process32First/Next`;改匹配或跳过扫描分支 | `E-anti-debug-procscan` | P1 |
803
+ | **D** | `AddVectoredExceptionHandler` + 故意访问违例 | bp 注册点;定位 VEH handler 分析;调试器可忽略特定异常 | `E-anti-debug-veh` | P1 |
804
+ | **E** | TimeDateStamp 未来/0/荒谬;版本信息像合法厂商 | 与发现时间对照;**可选** VT 首次提交;`SigCheck` 看版本资源是否配合签名;无 VT → n/a | `E-meta-timestamp` | P2 |
805
+ | **F** | 显示有数字签名但来源可疑 | `SigCheck`:链有效?吊销?签名时间 vs 编译时间;**无效/吊销不得降低**威胁等级 | `E-sig-forge` | P0 |
806
+ | **G** | 多 PE 头、重叠节、节名伪装 | CFF/PE-bear/LoadPE 看真实映射与 EP 节;熵区分加密 vs 代码;不信节名 | `E-pe-anomaly` | P1 |
807
+ | **H** | F5 大量 `while(1)+switch`、星形 CFG | **See** `ollvm-deobfuscation.md`(d810/deflat 等);插件不全则动态记录块序重构 | `E-cff` | P1 指针 |
808
+ | **I** | strings 无域名/IP 但有网/文件行为 | 找 Base64/XOR/自定义 decode;xref 解密函数;解密后 dump 回注 IDA | `E-string-decrypt` | P0 |
809
+ | **J** | 文件大小 ≫ 节原始数据之和(Overlay) | 提 overlay;`file`/熵;IDA 搜偏移引用;加密则动态抓密钥 | `E-overlay` | P1 |
810
+ | **K** | `fs:[0x30]`/`gs:[0x60]` → BeingDebugged / NtGlobalFlag | 改 PEB 标志或 ScyllaHide;或 patch 条件跳 | `E-anti-debug-peb` | P0 |
811
+ | **L** | 读 `/proc/self/status` 查 TracerPid≠0 | **Linux/ELF**:hook fopen/read 或 patch;Windows 不强制 | `E-anti-debug-tracerpid` | P2 平台 |
812
+ | **M** | `int3`(0xCC) 或读 DR0–DR7 | int3→nop;硬件 BP 检测用 ScyllaHide/软 BP;CRC 自检见补丁 6 | `E-anti-debug-bp` | P1 |
813
+ | **N** | IAT 空/极少 + 自写哈希解析 API | bp `GetProcAddress`/`Ldr*`;哈希反查导出表;回注符号;与「干净 IAT」铁律协同 | `E-api-hash` | P0 |
814
+ | **O** | 线性反汇编大量 db、花指令致错位 | F5/Hex-Rays;动态确认真流;junk nop 后 reanalyze;静还不全以动态为准 | `E-junk-code` | P2 |
815
+ | **P** | `NtQueryInformationProcess` class 7/30/31 | ScyllaHide 或 hook 返回;记 InformationClass | `E-anti-debug-ntqip` | P0 |
816
+ | **Q** | `.rsrc` 过大/高熵/非标准 RT_RCDATA | Resource Hacker/CFF 提取;`FindResource`/`LoadResource` xref;解密后 dump | `E-rsrc-payload` | P1 |
817
+ | **R** | 静态 IAT 无某 DLL,运行时才用 | 查 Delay Import Table;bp `__delayLoadHelper2` 或首次调用;纳入能力评估 | `E-delay-import` | P1 |
818
+ | **S** | 恒真/恒假条件、大片死代码 | **See** ollvm / angr 等;patch 唯一可达分支或动态路径回注 | `E-opaque-pred` | P1 指针 |
819
+ | **T** | ASCII strings 无结果,数据区像 UTF-16 | `strings -el` 或 `-encoding=utf-16le`;IDA Alt+A unicode;纳入 IOC | `E-wide-strings` | P0 |
820
+
821
+ ### 与主 workflow 的挂接
822
+
823
+ | 阶段 | 菜谱 |
824
+ |------|------|
825
+ | Triage | E, F, G, T(元数据/签名/节/宽串) |
826
+ | Static | H, I, J, N 线索, O, Q, R, S |
827
+ | Dynamic | A–D, K, L, M, N, P + 既有断点四级火箭与无行为应急 |
828
+ | 失败 | 任何绕不过的检测 → Evidence + 换工具/环境;不静默降威胁 |
829
+
830
+ ### 工具注记(非强制安装清单)
831
+
832
+ - Windows 用户态:x64dbg + **ScyllaHide**(PEB/NtQuery/硬件 BP 等批量隐藏)
833
+ - 签名:Sysinternals **SigCheck**
834
+ - PE 结构:PE-bear / CFF Explorer
835
+ - 平坦化:见 ollvm 专章工具表(d810-ng 等)
836
+ - 无某工具时:等价命令 + 记失败,禁止假装已验证签名/已脱平坦化