delphi6 program crack WriteUp

分析程序信息

  1. 使用《Detect It Easy》分析壳;

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

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

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

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

  6. 使用《accesspv》获取到数据库密码:Ly@Ld100;

  7. 利用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("------------------------")
	}
}

验证成功