@sylix/coworker 2.0.10 → 2.0.12
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.
- package/dist/commands/slash/config.d.ts.map +1 -1
- package/dist/commands/slash/config.js +23 -5
- package/dist/commands/slash/config.js.map +1 -1
- package/dist/commands/slash/todo.js +1 -1
- package/dist/commands/slash/todo.js.map +1 -1
- package/dist/core/CoWorkerAgent.d.ts.map +1 -1
- package/dist/core/CoWorkerAgent.js +6 -3
- package/dist/core/CoWorkerAgent.js.map +1 -1
- package/dist/permissions/PermissionInterceptor.js +1 -1
- package/dist/permissions/PermissionInterceptor.js.map +1 -1
- package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
- package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
- package/dist/skills/defaults/ai-ml/rag.md +276 -0
- package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
- package/dist/skills/defaults/backend-development/api-design.md +285 -0
- package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
- package/dist/skills/defaults/backend-development/async-python.md +237 -0
- package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
- package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
- package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
- package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
- package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
- package/dist/skills/defaults/backend-development/database-design.md +305 -0
- package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
- package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
- package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
- package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
- package/dist/skills/defaults/backend-development/fastapi.md +309 -0
- package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
- package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
- package/dist/skills/defaults/backend-development/microservices.md +284 -0
- package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
- package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
- package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
- package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
- package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
- package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
- package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
- package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
- package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
- package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
- package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
- package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
- package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
- package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
- package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
- package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
- package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
- package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
- package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
- package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
- package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
- package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
- package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
- package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
- package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
- package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
- package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
- package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
- package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
- package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
- package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
- package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
- package/dist/skills/defaults/data-engineering/airflow.md +519 -0
- package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
- package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
- package/dist/skills/defaults/data-engineering/dbt.md +556 -0
- package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
- package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
- package/dist/skills/defaults/data-engineering/spark.md +411 -0
- package/dist/skills/defaults/database/postgresql.md +202 -0
- package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
- package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
- package/dist/skills/defaults/devops/changelog-automation.md +580 -0
- package/dist/skills/defaults/devops/cicd.md +314 -0
- package/dist/skills/defaults/devops/cloud.md +263 -0
- package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
- package/dist/skills/defaults/devops/cost-optimization.md +295 -0
- package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
- package/dist/skills/defaults/devops/docker.md +281 -0
- package/dist/skills/defaults/devops/git-workflows.md +205 -0
- package/dist/skills/defaults/devops/github-actions.md +311 -0
- package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
- package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
- package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
- package/dist/skills/defaults/devops/kubernetes.md +339 -0
- package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
- package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
- package/dist/skills/defaults/devops/observability.md +243 -0
- package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
- package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
- package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
- package/dist/skills/defaults/devops/secrets-management.md +341 -0
- package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
- package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
- package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
- package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
- package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
- package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
- package/dist/skills/defaults/frontend/interaction-design.md +327 -0
- package/dist/skills/defaults/frontend/javascript.md +311 -0
- package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
- package/dist/skills/defaults/frontend/react-native-design.md +440 -0
- package/dist/skills/defaults/frontend/react.md +345 -0
- package/dist/skills/defaults/frontend/responsive-design.md +472 -0
- package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
- package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
- package/dist/skills/defaults/frontend/typescript.md +334 -0
- package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
- package/dist/skills/defaults/frontend/web-component-design.md +279 -0
- package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
- package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
- package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
- package/dist/skills/defaults/kubernetes/gitops.md +280 -0
- package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
- package/dist/skills/defaults/kubernetes/helm.md +343 -0
- package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
- package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
- package/dist/skills/defaults/kubernetes/manifests.md +330 -0
- package/dist/skills/defaults/kubernetes/security.md +337 -0
- package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
- package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
- package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
- package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
- package/dist/skills/defaults/llm-application/langchain.md +259 -0
- package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
- package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
- package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
- package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
- package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
- package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
- package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
- package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
- package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
- package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
- package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
- package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
- package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
- package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
- package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
- package/dist/skills/defaults/security/auditor.md +168 -0
- package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
- package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
- package/dist/skills/defaults/security/mtls-configuration.md +349 -0
- package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
- package/dist/skills/defaults/security/sast-configuration.md +182 -0
- package/dist/skills/defaults/security/security.md +313 -0
- package/dist/skills/defaults/security/stride-analysis.md +273 -0
- package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
- package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
- package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
- package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
- package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
- package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
- package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
- package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
- package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
- package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
- package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
- package/dist/skills/defaults/testing/testing.md +332 -0
- package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
- package/dist/skills/defaults/workflows/track-management.md +592 -0
- package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +129 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/utils/character.js +6 -9
- package/dist/utils/character.js.map +1 -1
- package/dist/utils/contextManager.js +3 -7
- package/dist/utils/contextManager.js.map +1 -1
- package/dist/utils/inputbar.d.ts.map +1 -1
- package/dist/utils/inputbar.js +8 -1
- package/dist/utils/inputbar.js.map +1 -1
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +3 -35
- package/dist/utils/output.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: binary-analysis-patterns
|
|
3
|
+
description: Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Binary Analysis Patterns
|
|
7
|
+
|
|
8
|
+
Comprehensive patterns and techniques for analyzing compiled binaries, understanding assembly code, and reconstructing program logic.
|
|
9
|
+
|
|
10
|
+
## Disassembly Fundamentals
|
|
11
|
+
|
|
12
|
+
### x86-64 Instruction Patterns
|
|
13
|
+
|
|
14
|
+
#### Function Prologue/Epilogue
|
|
15
|
+
|
|
16
|
+
```asm
|
|
17
|
+
; Standard prologue
|
|
18
|
+
push rbp ; Save base pointer
|
|
19
|
+
mov rbp, rsp ; Set up stack frame
|
|
20
|
+
sub rsp, 0x20 ; Allocate local variables
|
|
21
|
+
|
|
22
|
+
; Leaf function (no calls)
|
|
23
|
+
; May skip frame pointer setup
|
|
24
|
+
sub rsp, 0x18 ; Just allocate locals
|
|
25
|
+
|
|
26
|
+
; Standard epilogue
|
|
27
|
+
mov rsp, rbp ; Restore stack pointer
|
|
28
|
+
pop rbp ; Restore base pointer
|
|
29
|
+
ret
|
|
30
|
+
|
|
31
|
+
; Leave instruction (equivalent)
|
|
32
|
+
leave ; mov rsp, rbp; pop rbp
|
|
33
|
+
ret
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
#### Calling Conventions
|
|
37
|
+
|
|
38
|
+
**System V AMD64 (Linux, macOS)**
|
|
39
|
+
|
|
40
|
+
```asm
|
|
41
|
+
; Arguments: RDI, RSI, RDX, RCX, R8, R9, then stack
|
|
42
|
+
; Return: RAX (and RDX for 128-bit)
|
|
43
|
+
; Caller-saved: RAX, RCX, RDX, RSI, RDI, R8-R11
|
|
44
|
+
; Callee-saved: RBX, RBP, R12-R15
|
|
45
|
+
|
|
46
|
+
; Example: func(a, b, c, d, e, f, g)
|
|
47
|
+
mov rdi, [a] ; 1st arg
|
|
48
|
+
mov rsi, [b] ; 2nd arg
|
|
49
|
+
mov rdx, [c] ; 3rd arg
|
|
50
|
+
mov rcx, [d] ; 4th arg
|
|
51
|
+
mov r8, [e] ; 5th arg
|
|
52
|
+
mov r9, [f] ; 6th arg
|
|
53
|
+
push [g] ; 7th arg on stack
|
|
54
|
+
call func
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Microsoft x64 (Windows)**
|
|
58
|
+
|
|
59
|
+
```asm
|
|
60
|
+
; Arguments: RCX, RDX, R8, R9, then stack
|
|
61
|
+
; Shadow space: 32 bytes reserved on stack
|
|
62
|
+
; Return: RAX
|
|
63
|
+
|
|
64
|
+
; Example: func(a, b, c, d, e)
|
|
65
|
+
sub rsp, 0x28 ; Shadow space + alignment
|
|
66
|
+
mov rcx, [a] ; 1st arg
|
|
67
|
+
mov rdx, [b] ; 2nd arg
|
|
68
|
+
mov r8, [c] ; 3rd arg
|
|
69
|
+
mov r9, [d] ; 4th arg
|
|
70
|
+
mov [rsp+0x20], [e] ; 5th arg on stack
|
|
71
|
+
call func
|
|
72
|
+
add rsp, 0x28
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### ARM Assembly Patterns
|
|
76
|
+
|
|
77
|
+
#### ARM64 (AArch64) Calling Convention
|
|
78
|
+
|
|
79
|
+
```asm
|
|
80
|
+
; Arguments: X0-X7
|
|
81
|
+
; Return: X0 (and X1 for 128-bit)
|
|
82
|
+
; Frame pointer: X29
|
|
83
|
+
; Link register: X30
|
|
84
|
+
|
|
85
|
+
; Function prologue
|
|
86
|
+
stp x29, x30, [sp, #-16]! ; Save FP and LR
|
|
87
|
+
mov x29, sp ; Set frame pointer
|
|
88
|
+
|
|
89
|
+
; Function epilogue
|
|
90
|
+
ldp x29, x30, [sp], #16 ; Restore FP and LR
|
|
91
|
+
ret
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### ARM32 Calling Convention
|
|
95
|
+
|
|
96
|
+
```asm
|
|
97
|
+
; Arguments: R0-R3, then stack
|
|
98
|
+
; Return: R0 (and R1 for 64-bit)
|
|
99
|
+
; Link register: LR (R14)
|
|
100
|
+
|
|
101
|
+
; Function prologue
|
|
102
|
+
push {fp, lr}
|
|
103
|
+
add fp, sp, #4
|
|
104
|
+
|
|
105
|
+
; Function epilogue
|
|
106
|
+
pop {fp, pc} ; Return by popping PC
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Control Flow Patterns
|
|
110
|
+
|
|
111
|
+
### Conditional Branches
|
|
112
|
+
|
|
113
|
+
```asm
|
|
114
|
+
; if (a == b)
|
|
115
|
+
cmp eax, ebx
|
|
116
|
+
jne skip_block
|
|
117
|
+
; ... if body ...
|
|
118
|
+
skip_block:
|
|
119
|
+
|
|
120
|
+
; if (a < b) - signed
|
|
121
|
+
cmp eax, ebx
|
|
122
|
+
jge skip_block ; Jump if greater or equal
|
|
123
|
+
; ... if body ...
|
|
124
|
+
skip_block:
|
|
125
|
+
|
|
126
|
+
; if (a < b) - unsigned
|
|
127
|
+
cmp eax, ebx
|
|
128
|
+
jae skip_block ; Jump if above or equal
|
|
129
|
+
; ... if body ...
|
|
130
|
+
skip_block:
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Loop Patterns
|
|
134
|
+
|
|
135
|
+
```asm
|
|
136
|
+
; for (int i = 0; i < n; i++)
|
|
137
|
+
xor ecx, ecx ; i = 0
|
|
138
|
+
loop_start:
|
|
139
|
+
cmp ecx, [n] ; i < n
|
|
140
|
+
jge loop_end
|
|
141
|
+
; ... loop body ...
|
|
142
|
+
inc ecx ; i++
|
|
143
|
+
jmp loop_start
|
|
144
|
+
loop_end:
|
|
145
|
+
|
|
146
|
+
; while (condition)
|
|
147
|
+
jmp loop_check
|
|
148
|
+
loop_body:
|
|
149
|
+
; ... body ...
|
|
150
|
+
loop_check:
|
|
151
|
+
cmp eax, ebx
|
|
152
|
+
jl loop_body
|
|
153
|
+
|
|
154
|
+
; do-while
|
|
155
|
+
loop_body:
|
|
156
|
+
; ... body ...
|
|
157
|
+
cmp eax, ebx
|
|
158
|
+
jl loop_body
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Switch Statement Patterns
|
|
162
|
+
|
|
163
|
+
```asm
|
|
164
|
+
; Jump table pattern
|
|
165
|
+
mov eax, [switch_var]
|
|
166
|
+
cmp eax, max_case
|
|
167
|
+
ja default_case
|
|
168
|
+
jmp [jump_table + eax*8]
|
|
169
|
+
|
|
170
|
+
; Sequential comparison (small switch)
|
|
171
|
+
cmp eax, 1
|
|
172
|
+
je case_1
|
|
173
|
+
cmp eax, 2
|
|
174
|
+
je case_2
|
|
175
|
+
cmp eax, 3
|
|
176
|
+
je case_3
|
|
177
|
+
jmp default_case
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Data Structure Patterns
|
|
181
|
+
|
|
182
|
+
### Array Access
|
|
183
|
+
|
|
184
|
+
```asm
|
|
185
|
+
; array[i] - 4-byte elements
|
|
186
|
+
mov eax, [rbx + rcx*4] ; rbx=base, rcx=index
|
|
187
|
+
|
|
188
|
+
; array[i] - 8-byte elements
|
|
189
|
+
mov rax, [rbx + rcx*8]
|
|
190
|
+
|
|
191
|
+
; Multi-dimensional array[i][j]
|
|
192
|
+
; arr[i][j] = base + (i * cols + j) * element_size
|
|
193
|
+
imul eax, [cols]
|
|
194
|
+
add eax, [j]
|
|
195
|
+
mov edx, [rbx + rax*4]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Structure Access
|
|
199
|
+
|
|
200
|
+
```c
|
|
201
|
+
struct Example {
|
|
202
|
+
int a; // offset 0
|
|
203
|
+
char b; // offset 4
|
|
204
|
+
// padding // offset 5-7
|
|
205
|
+
long c; // offset 8
|
|
206
|
+
short d; // offset 16
|
|
207
|
+
};
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
```asm
|
|
211
|
+
; Accessing struct fields
|
|
212
|
+
mov rdi, [struct_ptr]
|
|
213
|
+
mov eax, [rdi] ; s->a (offset 0)
|
|
214
|
+
movzx eax, byte [rdi+4] ; s->b (offset 4)
|
|
215
|
+
mov rax, [rdi+8] ; s->c (offset 8)
|
|
216
|
+
movzx eax, word [rdi+16] ; s->d (offset 16)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Linked List Traversal
|
|
220
|
+
|
|
221
|
+
```asm
|
|
222
|
+
; while (node != NULL)
|
|
223
|
+
list_loop:
|
|
224
|
+
test rdi, rdi ; node == NULL?
|
|
225
|
+
jz list_done
|
|
226
|
+
; ... process node ...
|
|
227
|
+
mov rdi, [rdi+8] ; node = node->next (assuming next at offset 8)
|
|
228
|
+
jmp list_loop
|
|
229
|
+
list_done:
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Common Code Patterns
|
|
233
|
+
|
|
234
|
+
### String Operations
|
|
235
|
+
|
|
236
|
+
```asm
|
|
237
|
+
; strlen pattern
|
|
238
|
+
xor ecx, ecx
|
|
239
|
+
strlen_loop:
|
|
240
|
+
cmp byte [rdi + rcx], 0
|
|
241
|
+
je strlen_done
|
|
242
|
+
inc ecx
|
|
243
|
+
jmp strlen_loop
|
|
244
|
+
strlen_done:
|
|
245
|
+
; ecx contains length
|
|
246
|
+
|
|
247
|
+
; strcpy pattern
|
|
248
|
+
strcpy_loop:
|
|
249
|
+
mov al, [rsi]
|
|
250
|
+
mov [rdi], al
|
|
251
|
+
test al, al
|
|
252
|
+
jz strcpy_done
|
|
253
|
+
inc rsi
|
|
254
|
+
inc rdi
|
|
255
|
+
jmp strcpy_loop
|
|
256
|
+
strcpy_done:
|
|
257
|
+
|
|
258
|
+
; memcpy using rep movsb
|
|
259
|
+
mov rdi, dest
|
|
260
|
+
mov rsi, src
|
|
261
|
+
mov rcx, count
|
|
262
|
+
rep movsb
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Arithmetic Patterns
|
|
266
|
+
|
|
267
|
+
```asm
|
|
268
|
+
; Multiplication by constant
|
|
269
|
+
; x * 3
|
|
270
|
+
lea eax, [rax + rax*2]
|
|
271
|
+
|
|
272
|
+
; x * 5
|
|
273
|
+
lea eax, [rax + rax*4]
|
|
274
|
+
|
|
275
|
+
; x * 10
|
|
276
|
+
lea eax, [rax + rax*4] ; x * 5
|
|
277
|
+
add eax, eax ; * 2
|
|
278
|
+
|
|
279
|
+
; Division by power of 2 (signed)
|
|
280
|
+
mov eax, [x]
|
|
281
|
+
cdq ; Sign extend to EDX:EAX
|
|
282
|
+
and edx, 7 ; For divide by 8
|
|
283
|
+
add eax, edx ; Adjust for negative
|
|
284
|
+
sar eax, 3 ; Arithmetic shift right
|
|
285
|
+
|
|
286
|
+
; Modulo power of 2
|
|
287
|
+
and eax, 7 ; x % 8
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### Bit Manipulation
|
|
291
|
+
|
|
292
|
+
```asm
|
|
293
|
+
; Test specific bit
|
|
294
|
+
test eax, 0x80 ; Test bit 7
|
|
295
|
+
jnz bit_set
|
|
296
|
+
|
|
297
|
+
; Set bit
|
|
298
|
+
or eax, 0x10 ; Set bit 4
|
|
299
|
+
|
|
300
|
+
; Clear bit
|
|
301
|
+
and eax, ~0x10 ; Clear bit 4
|
|
302
|
+
|
|
303
|
+
; Toggle bit
|
|
304
|
+
xor eax, 0x10 ; Toggle bit 4
|
|
305
|
+
|
|
306
|
+
; Count leading zeros
|
|
307
|
+
bsr eax, ecx ; Bit scan reverse
|
|
308
|
+
xor eax, 31 ; Convert to leading zeros
|
|
309
|
+
|
|
310
|
+
; Population count (popcnt)
|
|
311
|
+
popcnt eax, ecx ; Count set bits
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## Decompilation Patterns
|
|
315
|
+
|
|
316
|
+
### Variable Recovery
|
|
317
|
+
|
|
318
|
+
```asm
|
|
319
|
+
; Local variable at rbp-8
|
|
320
|
+
mov qword [rbp-8], rax ; Store to local
|
|
321
|
+
mov rax, [rbp-8] ; Load from local
|
|
322
|
+
|
|
323
|
+
; Stack-allocated array
|
|
324
|
+
lea rax, [rbp-0x40] ; Array starts at rbp-0x40
|
|
325
|
+
mov [rax], edx ; array[0] = value
|
|
326
|
+
mov [rax+4], ecx ; array[1] = value
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### Function Signature Recovery
|
|
330
|
+
|
|
331
|
+
```asm
|
|
332
|
+
; Identify parameters by register usage
|
|
333
|
+
func:
|
|
334
|
+
; rdi used as first param (System V)
|
|
335
|
+
mov [rbp-8], rdi ; Save param to local
|
|
336
|
+
; rsi used as second param
|
|
337
|
+
mov [rbp-16], rsi
|
|
338
|
+
; Identify return by RAX at end
|
|
339
|
+
mov rax, [result]
|
|
340
|
+
ret
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Type Recovery
|
|
344
|
+
|
|
345
|
+
```asm
|
|
346
|
+
; 1-byte operations suggest char/bool
|
|
347
|
+
movzx eax, byte [rdi] ; Zero-extend byte
|
|
348
|
+
movsx eax, byte [rdi] ; Sign-extend byte
|
|
349
|
+
|
|
350
|
+
; 2-byte operations suggest short
|
|
351
|
+
movzx eax, word [rdi]
|
|
352
|
+
movsx eax, word [rdi]
|
|
353
|
+
|
|
354
|
+
; 4-byte operations suggest int/float
|
|
355
|
+
mov eax, [rdi]
|
|
356
|
+
movss xmm0, [rdi] ; Float
|
|
357
|
+
|
|
358
|
+
; 8-byte operations suggest long/double/pointer
|
|
359
|
+
mov rax, [rdi]
|
|
360
|
+
movsd xmm0, [rdi] ; Double
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Ghidra Analysis Tips
|
|
364
|
+
|
|
365
|
+
### Improving Decompilation
|
|
366
|
+
|
|
367
|
+
```java
|
|
368
|
+
// In Ghidra scripting
|
|
369
|
+
// Fix function signature
|
|
370
|
+
Function func = getFunctionAt(toAddr(0x401000));
|
|
371
|
+
func.setReturnType(IntegerDataType.dataType, SourceType.USER_DEFINED);
|
|
372
|
+
|
|
373
|
+
// Create structure type
|
|
374
|
+
StructureDataType struct = new StructureDataType("MyStruct", 0);
|
|
375
|
+
struct.add(IntegerDataType.dataType, "field_a", null);
|
|
376
|
+
struct.add(PointerDataType.dataType, "next", null);
|
|
377
|
+
|
|
378
|
+
// Apply to memory
|
|
379
|
+
createData(toAddr(0x601000), struct);
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Pattern Matching Scripts
|
|
383
|
+
|
|
384
|
+
```python
|
|
385
|
+
# Find all calls to dangerous functions
|
|
386
|
+
for func in currentProgram.getFunctionManager().getFunctions(True):
|
|
387
|
+
for ref in getReferencesTo(func.getEntryPoint()):
|
|
388
|
+
if func.getName() in ["strcpy", "sprintf", "gets"]:
|
|
389
|
+
print(f"Dangerous call at {ref.getFromAddress()}")
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## IDA Pro Patterns
|
|
393
|
+
|
|
394
|
+
### IDAPython Analysis
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
import idaapi
|
|
398
|
+
import idautils
|
|
399
|
+
import idc
|
|
400
|
+
|
|
401
|
+
# Find all function calls
|
|
402
|
+
def find_calls(func_name):
|
|
403
|
+
for func_ea in idautils.Functions():
|
|
404
|
+
for head in idautils.Heads(func_ea, idc.find_func_end(func_ea)):
|
|
405
|
+
if idc.print_insn_mnem(head) == "call":
|
|
406
|
+
target = idc.get_operand_value(head, 0)
|
|
407
|
+
if idc.get_func_name(target) == func_name:
|
|
408
|
+
print(f"Call to {func_name} at {hex(head)}")
|
|
409
|
+
|
|
410
|
+
# Rename functions based on strings
|
|
411
|
+
def auto_rename():
|
|
412
|
+
for s in idautils.Strings():
|
|
413
|
+
for xref in idautils.XrefsTo(s.ea):
|
|
414
|
+
func = idaapi.get_func(xref.frm)
|
|
415
|
+
if func and "sub_" in idc.get_func_name(func.start_ea):
|
|
416
|
+
# Use string as hint for naming
|
|
417
|
+
pass
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
## Best Practices
|
|
421
|
+
|
|
422
|
+
### Analysis Workflow
|
|
423
|
+
|
|
424
|
+
1. **Initial triage**: File type, architecture, imports/exports
|
|
425
|
+
2. **String analysis**: Identify interesting strings, error messages
|
|
426
|
+
3. **Function identification**: Entry points, exports, cross-references
|
|
427
|
+
4. **Control flow mapping**: Understand program structure
|
|
428
|
+
5. **Data structure recovery**: Identify structs, arrays, globals
|
|
429
|
+
6. **Algorithm identification**: Crypto, hashing, compression
|
|
430
|
+
7. **Documentation**: Comments, renamed symbols, type definitions
|
|
431
|
+
|
|
432
|
+
### Common Pitfalls
|
|
433
|
+
|
|
434
|
+
- **Optimizer artifacts**: Code may not match source structure
|
|
435
|
+
- **Inline functions**: Functions may be expanded inline
|
|
436
|
+
- **Tail call optimization**: `jmp` instead of `call` + `ret`
|
|
437
|
+
- **Dead code**: Unreachable code from optimization
|
|
438
|
+
- **Position-independent code**: RIP-relative addressing
|