v0.1 - initial commit
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
// Шаблон solve-скрипта для winpwn.
|
||||
// cp -r ../workspace/template ../workspace/mysolve
|
||||
// cd ../workspace/mysolve && go run .
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"log"
|
||||
"strconv"
|
||||
"winpwn"
|
||||
)
|
||||
|
||||
func p64(v uint64) []byte { return winpwn.P64(v) }
|
||||
func u64(b []byte) uint64 { return binary.LittleEndian.Uint64(b) }
|
||||
|
||||
func parseHex(s string) uint64 {
|
||||
v, _ := strconv.ParseUint(s, 16, 64)
|
||||
return v
|
||||
}
|
||||
|
||||
func parseAddr(line []byte) (uint64, error) {
|
||||
idx := bytes.Index(line, []byte("0x"))
|
||||
if idx == -1 {
|
||||
return 0, fmt.Errorf("no hex addr in %q", line)
|
||||
}
|
||||
return strconv.ParseUint(string(bytes.TrimSpace(line[idx+2:])), 16, 64)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// --- Вариант А: статический бинарь без ASLR ---
|
||||
// Открыть PE для анализа (работает для ASLR:No)
|
||||
pf, err := winpwn.OpenPE("chal.exe")
|
||||
if err != nil {
|
||||
log.Fatalf("OpenPE: %v", err)
|
||||
}
|
||||
winRVA, _ := pf.GetProcAddress("win")
|
||||
base, _ := pf.ImageBase()
|
||||
winAddr := base + winRVA
|
||||
pf.Close()
|
||||
fmt.Printf("[+] win() @ 0x%X\n", winAddr)
|
||||
|
||||
// Запустить таргет
|
||||
tube, err := winpwn.Spawn("chal.exe")
|
||||
if err != nil {
|
||||
log.Fatalf("Spawn: %v", err)
|
||||
}
|
||||
|
||||
// --- Вариант Б: символы живого процесса (аналог pwintools p.libs/p.symbols) ---
|
||||
// sym := winpwn.NewProcessSymbols(tube.PID())
|
||||
// defer sym.Close()
|
||||
// k32, _ := sym.Base("kernel32.dll")
|
||||
// winexec, _ := sym.Symbol("kernel32.dll", "WinExec")
|
||||
// mods, _ := sym.Modules() // все загруженные DLL
|
||||
_ = winAddr
|
||||
|
||||
tube.RecvLine() // баннер готовности
|
||||
|
||||
// Твой эксплойт здесь
|
||||
|
||||
tube.Interactive()
|
||||
}
|
||||
Reference in New Issue
Block a user