delphi6 program crack WriteUp
2025-04-30
3 min read
分析程序信息
-
使用《Detect It Easy》分析壳;

-
查到打包工具为ASPack,找到解包工具《AspackDie141》,对二进制解包;

-
使用IDR《Interactive Delphi Reconstructor》反编译工具获取delphi的字符信息,导出IDC数据交由ida pro使用;

-
得到对应按钮的调用方法;

-
略过ida pro调试过程,跟踪得到加密算法;

-
使用《accesspv》获取到数据库密码:Ly@Ld100;
-
利用deepseek帮助得到反编译的加密算法
def transform_string(input_str):
"""
对输入字符串进行特定转换
算法逻辑:
1. 遍历字符串中的每个字符
2. 对每个字符进行以下计算:
a. (字符ASCII码 + 字符位置 + 0x1D) % 9
b. 将余数加上0x31得到新字符
3. 返回转换后的字符串
"""
result = list(input_str) # 将字符串转为列表便于修改
str_length = len(input_str)
for position in range(str_length):
# 字符位置从1开始计数(如汇编中的esi)
current_pos = position + 1
# 获取当前字符的ASCII码
char_code = ord(result[position])
# 核心计算逻辑
temp_value = char_code + current_pos + 0x1D
remainder = temp_value % 9
new_char_code = remainder + 0x31 # 0x31是'1'的ASCII码
# 更新字符
result[position] = chr(new_char_code)
return ''.join(result)
# 使用示例
if __name__ == "__main__":
test_string = "ABCDE" # 替换为你的测试字符串
transformed = transform_string(test_string)
print(f"原始字符串: {test_string}")
print(f"转换后字符串: {transformed}")
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func transformString(input string) string {
// 将字符串转为rune切片便于修改(处理Unicode字符)
result := []rune(input)
length := len(result)
for i := 0; i < length; i++ {
// 位置从1开始计数(如汇编中的esi)
position := i + 1
// 获取当前字符的ASCII码
charCode := int(result[i])
// 核心计算逻辑
tempValue := charCode + position + 0x1D
remainder := tempValue % 9
newCharCode := remainder + 0x31 // 0x31是'1'的ASCII码
// 更新字符
result[i] = rune(newCharCode)
}
return string(result)
}
func main() {
reader := bufio.NewReader(os.Stdin)
for {
fmt.Println("请输入要转换的字符串(输入q退出):")
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
if input == "q" {
fmt.Println("程序退出")
break
}
if len(input) == 0 {
fmt.Println("输入不能为空,请重新输入")
continue
}
transformed := transformString(input)
fmt.Printf("原始字符串: %s\n", input)
fmt.Printf("转换后字符串: %s\n", transformed)
fmt.Println("------------------------")
}
}
验证成功
