Skip to content

[LAB8] 313551150 #552

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
5738390
Update lab0.js
banana1715 Feb 27, 2025
49da754
feat: lab1
AxelHowe Mar 5, 2025
44a2583
Merge branch 'SQLab:313551150' into 313551150
banana1715 Mar 9, 2025
9b4f698
test
banana1715 Mar 9, 2025
f895388
test
banana1715 Mar 9, 2025
b3f479d
Update main_test.js
banana1715 Mar 9, 2025
e768b73
Update lab0.js
banana1715 Mar 9, 2025
f4c7e91
Merge pull request #64 from banana1715/313551150
AxelHowe Mar 12, 2025
ffd245b
feat: lab2
AxelHowe Mar 12, 2025
e24147f
Merge branch 'SQLab:main' into main
banana1715 Mar 18, 2025
d93f35d
Update main_test.js
banana1715 Mar 18, 2025
9495b88
Update main_test.js
banana1715 Mar 19, 2025
96dc9b0
Update main_test.js
banana1715 Mar 19, 2025
3b5c218
Update main_test.js
banana1715 Mar 19, 2025
72ded48
Update main_test.js
banana1715 Mar 19, 2025
6c98f26
Merge pull request #195 from banana1715/313551150
AxelHowe Mar 19, 2025
f91e0f3
feat: lab3
CTHua Mar 20, 2025
ee9a517
Merge branch 'SQLab:main' into main
banana1715 Mar 26, 2025
646d772
feat: lab4
CTHua Mar 27, 2025
a6492bd
feat: lab5
YingMuo Apr 23, 2025
92e14d7
fix: autograding
YingMuo Apr 25, 2025
02a31c1
Merge branch 'SQLab:main' into lab5
banana1715 Apr 30, 2025
672b5c1
Update antiasan.c
banana1715 Apr 30, 2025
8a05492
Merge branch '313551150' into lab5
banana1715 Apr 30, 2025
b839e61
Update antiasan.c
banana1715 Apr 30, 2025
960ed3a
Update main_test.js
banana1715 Apr 30, 2025
14aba3c
Merge pull request #420 from banana1715/lab5
YingMuo May 1, 2025
f975718
feat: lab6
YingMuo May 1, 2025
906208f
Merge branch 'SQLab:main' into main
banana1715 May 6, 2025
139f54a
Update llvm-pass.so.cc
banana1715 May 7, 2025
5b1e41a
Merge branch '313551150' into lab6
banana1715 May 7, 2025
7f84a87
Merge pull request #464 from banana1715/lab6
YingMuo May 8, 2025
eee7787
feat: lab8
YingMuo May 15, 2025
ceba5b4
fix: lab8 no angr
YingMuo May 19, 2025
6a73a16
Merge branch 'SQLab:main' into lab8
banana1715 May 21, 2025
9833927
Update solve.py
banana1715 May 21, 2025
f846c15
Merge branch '313551150' into lab8
banana1715 May 21, 2025
11b4c35
Update solve.py
banana1715 May 21, 2025
ce50d90
Update solve.py
banana1715 May 21, 2025
59ff1c5
Update solve.py
banana1715 May 21, 2025
f91818c
Update solve.py
banana1715 May 21, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lab0/lab0.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log("Hello world!");
2 changes: 1 addition & 1 deletion lab1/main_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ test("Test Student's setName", () => {
test("Test Student's getName", () => {
// TODO
throw new Error("Test not implemented");
});
});
8 changes: 6 additions & 2 deletions lab5/antiasan.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
#include <string.h>

void antiasan(unsigned long addr)
{

extern char gS[];
extern char gBadBuf[];
extern void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
void antiasan(unsigned long addr) {
__asan_unpoison_memory_region(gS, 0xa7);
__asan_unpoison_memory_region(gBadBuf, 0xa7);
}
56 changes: 42 additions & 14 deletions lab6/llvm-pass.so.cc
Original file line number Diff line number Diff line change
@@ -1,34 +1,62 @@
#include "llvm/Passes/PassPlugin.h"
#include "llvm/Passes/PassBuilder.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/GlobalVariable.h"

using namespace llvm;

struct LLVMPass : public PassInfoMixin<LLVMPass> {
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM);
};
struct LLVMPass : PassInfoMixin<LLVMPass> {
PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM) {
LLVMContext &Ctx = M.getContext();

// 1) Declare debug prototype: void debug(i32)
FunctionCallee debugFunc = M.getOrInsertFunction(
"debug",
FunctionType::get(Type::getVoidTy(Ctx), {Type::getInt32Ty(Ctx)}, false)
);
ConstantInt *const48763 = ConstantInt::get(Type::getInt32Ty(Ctx), 48763);

// 2) Locate main
if (Function *F = M.getFunction("main")) {
BasicBlock &entryBB = F->getEntryBlock();
// Insert right after any allocas/PHIs in entry
IRBuilder<> builder(&*entryBB.getFirstInsertionPt());

// --- (40%) Call debug(48763) ---
builder.CreateCall(debugFunc, {const48763});

PreservedAnalyses LLVMPass::run(Module &M, ModuleAnalysisManager &MAM) {
LLVMContext &Ctx = M.getContext();
IntegerType *Int32Ty = IntegerType::getInt32Ty(Ctx);
FunctionCallee debug_func = M.getOrInsertFunction("debug", Int32Ty);
ConstantInt *debug_arg = ConstantInt::get(Int32Ty, 48763);
// --- (30%) Overwrite argc → 48763 ---
// main signature is: i32 @main(i32 %argc, i8** %argv)
Argument *argcArg = &*F->arg_begin();
argcArg->replaceAllUsesWith(const48763);

for (auto &F : M) {
errs() << "func: " << F.getName() << "\n";
// --- (30%) Overwrite argv[1] → "hayaku... motohayaku!" ---
Argument *argvArg = &*(std::next(F->arg_begin()));
// Create a global constant string
Value *strPtr = builder.CreateGlobalStringPtr("hayaku... motohayaku!");
// Compute pointer to argv[1]: getelementptr i8*, i8** %argv, i64 1
Value *idx1 = ConstantInt::get(Type::getInt64Ty(Ctx), 1);
Value *ptrToArg1 = builder.CreateInBoundsGEP(
argvArg->getType()->getPointerElementType(), // element type = i8*
argvArg, // base pointer i8**
idx1
);
// Store the new string into argv[1]
builder.CreateStore(strPtr, ptrToArg1);
}

return PreservedAnalyses::none();
}
return PreservedAnalyses::none();
}
};

extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
llvmGetPassPluginInfo() {
return {LLVM_PLUGIN_API_VERSION, "LLVMPass", "1.0",
[](PassBuilder &PB) {
PB.registerOptimizerLastEPCallback(
[](ModulePassManager &MPM, OptimizationLevel OL) {
[](ModulePassManager &MPM, OptimizationLevel) {
MPM.addPass(LLVMPass());
});
}};
}

31 changes: 27 additions & 4 deletions lab8/solve.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,34 @@
#!/usr/bin/env python3

import angr,sys
import angr
import claripy
import sys

def main():
secret_key = b""
sys.stdout.buffer.write(secret_key)
proj = angr.Project('./chal', auto_load_libs=False)

#建立8-bit輸入
sym_chars = [claripy.BVS(f'byte_{i}', 8) for i in range(8)]
sym_input = claripy.Concat(*sym_chars)

#初始化執行狀態並模擬stdin輸入
state = proj.factory.full_init_state(
stdin = angr.SimFileStream(name='stdin', content=sym_input, has_end=True)
)

#建立模擬器並開始搜尋個別狀態
simgr = proj.factory.simgr(state)
simgr.explore(
find = lambda s:b"Correct!" in s.posix.dumps(1)
)

#找到則輸出結果,否則輸出 "No solution found!"
if simgr.found:
found = simgr.found[0]
secret_key = found.solver.eval(sym_input, cast_to=bytes)
sys.stdout.buffer.write(secret_key)
else:
print("No solution found!")
sys.exit(1)

if __name__ == '__main__':
main()
Loading