- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我编译 Inno Setup 项目时,[Code]
部分也被编译(作为 Pascal 可执行文件或 Pascal DLL)?
换句话说,如果有人解压一个 Inno Setup 项目,他能看到 [Code]
部分作为原始源代码(该死!:))或作为编译的可执行文件/DLL(难以反汇编)?
我想插入[Code]
部分字符串(密码和 key ),我不知道它们是否也可以轻松恢复,而对逆向工程知之甚少。
最佳答案
代码被编译成某种二进制表示(非常类似于 .NET CIL 或 Java bytecode )。
有Inno Setup Unpacker (和其他),它可以从 .exe
中提取文件由 Inno Setup 生成。它可以将代码的二进制表示提取到CompiledCode.bin
(如果您使用 -x -m
标志)。
然后你可以使用能够反编译/反汇编 CompiledCode.bin
的 Inno Setup Decompiler 项目。文件转换为(伪)Pascal Script 代码。但与 .NET 或 Java 的逆向工程一样,它不会为您提供准确的代码。反编译的代码甚至可能无法编译(至少我上次尝试时是这样),但足以看到代码的作用。他们现在似乎有付费版本,这可能比我前段时间尝试的免费版本更好。 (最新版本的 Inno Setup Decompiler 甚至可以直接从 .exe
中提取代码,但它还没有更新到最新版本的 Inno Setup [5.6.1],所以它对我不起作用。)
(Inno Setup Decompiler 站点已经消失,但它并没有改变在技术上可以反编译/反汇编已编译代码的事实)
即使在 CompiledCode.bin
中,也很容易看到代码中编译的文字字符串。 .
例如这些凭据:
Username := 'secretusername';
Password := 'mysupersecretpassword';
可以在
CompiledCode.bin
中看到这样的文件:
function CryptStringToBinary(
sz: string; cch: LongWord; flags: LongWord; binary: AnsiString;
var size: LongWord; skip: LongWord; flagsused: LongWord): Integer;
external 'CryptStringToBinaryW@crypt32.dll stdcall';
const
CRYPT_STRING_HEX = $04;
function UnobfuscateString(S: string): string;
var
Size: LongWord;
Buffer: AnsiString;
Len: Integer;
begin
SetLength(Buffer, (Length(S) div 2) + 1);
Len := Length(S);
Size := Len div 2;
if (CryptStringToBinary(S, Len, CRYPT_STRING_HEX, Buffer, Size, 0, 0) = 0) or
(Size <> Length(S) div 2) then
begin
RaiseException('Error unobfuscating string');
end;
Result := Buffer;
end;
#define ObfuscateString(str S) \
Local[0] = AddBackslash(GetEnv("TEMP")) + "ObfuscatedString.pas", \
Local[1] = \
"-ExecutionPolicy Bypass -Command """ + \
"$bytes = [Text.Encoding]::ASCII.GetBytes('" + S + "'); " + \
"$s = '''' + (($bytes | foreach { $_.ToString('X2') }) -join '') + ''''; " + \
"Set-Content -Path '" + Local[0] + "' -Value $s;" + \
"""", \
Exec("powershell.exe", Local[1], SourcePath, , SW_HIDE), \
Local[2] = FileOpen(Local[0]), \
Local[3] = FileRead(Local[2]), \
FileClose(Local[2]), \
DeleteFileNow(Local[0]), \
"UnobfuscateString(" + Local[3] + ")"
(该代码在
Unicode version of Inno Setup 上进行了测试。不过,它只能使用 ASCII 密码。)
Username := {#ObfuscateString("secretusername")};
Password := {#ObfuscateString("mysupersecretpassword")};
但是代码将被编译为:
Username := UnobfuscateString('736563726574757365726E616D65');
Password := UnobfuscateString('6D79737570657273656372657470617373776F7264');
您可以通过将其添加到
.iss
的末尾来验证这一点。脚本并检查生成的
Preprocessed.iss
文件。
#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss")
因此,尽管凭据在源代码中是可读的,但它们不会按字面意思存储到编译代码中:
关于inno-setup - 从 Inno Setup [代码] 中拆卸字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194957/
是否可以获得用于 Inno Setup 安装程序的 Inno Setup 版本号? 我找不到记录的开关来返回其版本号(例如 5.5.6),而且似乎没有暴露给 Inno Setup 脚本的预定义版本常量
我有一个小但令人沮丧的问题。我为可执行文件创建了可能有快捷方式的安装程序,但如果可执行文件不在主文件夹中,可以说 MyProgram\bin\myprogram.exe 安装程序会在主程序文件夹中复制
/VERYSILENT在使用集中式软件将应用程序部署到整个组织时,Inno Setup 提供的选项非常有用,但有一些好处对我来说并不完全清楚。 特别是,在删除需要取消注册并标记为共享对象的 dll/c
我对 Inno Setup 卸载程序有疑问。我有一个 exe 文件,我想执行它来跟踪安装和卸载。该 exe 非常简单,可以向服务器发送消息。 [Files] Source: "Tracker\Loca
我正在使用Inno Setup安装和更新我的python应用程序。 更新时,安装程序不会从以前的安装中删除py文件,这会导致两个问题: 我正在使用插件:如果删除新版本的插件,执行更新的用户仍然可以
我正在使用Inno Setup,并试图关联Windows 7中Program Files (x86)中的程序。我具有以下内容: #define MyAppName "MyView" #define M
我想删除页面底部的标签,我在其中选择了安装组件的目录。标签显示安装应用程序所需的最小磁盘空间。 最佳答案 您想要隐藏 DiskSpaceLabel 控件: [Code] procedure Initi
我们正在将我们的应用程序切换到 .Net4,但我们仍然有使用 Windows XP SP2 的客户。所以我需要在设置中进行额外的检查。 在安装开始时制作一条弹出消息以丢弃 XP SP2 用户非常简单:
这是用于 Inno Setup 的 [Setup] 部分中的 LicenseFile 属性的标准 RTF 文档: 是否可以向此页面添加打印按钮以触发打印许可协议(protocol)? 我看到了一个类似
我有一个 Inno Setup 脚本可以将我的应用程序变成一个 exe。 当我使用 Inno Setup 版本 6 编译代码时,输出文件大小为 110MB(如 Windows Explorer 大
Inno Setup - 我想创建一个类似于屏幕截图的安装程序。 安装程序应在左侧突出显示当前步骤。 如何实现? 最佳答案 @Bill_Stewart 是正确的,普通的 Inno Setup 不提供如
图像作为安装程序背景。如何使用 inno 5.5.9 做到这一点? 最佳答案 我认为这在 Inno Setup 中是不可能的。也许是一些 Inno Setup 克隆。 问题是Inno Setup中的所
这个问题在这里已经有了答案: Inno Setup - Signing fails with "Sign Tool failed with exit code 0x1" (2 个答案) 关闭 3 年
如何获取有关安装程序中包含的文件的信息(最后修改时间戳、文件大小)?通过使用文件的路径,很容易引用磁盘上的文件。但是当文件没有路径时,如何在安装程序中引用它呢? 当安装程序初始化时,我想检查磁盘上是否
Inno Setup 中的单词补全是如何工作的? 如果我在代码中的任何标识符或单词的中间或末尾按 Alt+Right,则没有任何反应。 我找不到任何要安装的扩展,也找不到该主题的 Internet 答
从这里开始:Inno Setup Placing image/control on custom page . 这是做我需要的: CustomPage := CreateCustomPage(wpLi
我的安装程序在组件页面中有一个可视错误。在您开始向下滚动页面之前看起来还不错,但开始看起来一团糟。 我认为问题出在代码中的某个地方,但仅在绝对干净的脚本上重新创建了组件部分,问题仍然存在。尝试更改缩放
如何在 Inno Setup 编译器中为我们的设置提供背景全屏图像。 喜欢下面这张图。 最佳答案 不要那样做。这违反了 Windows 设计指南。 无论如何,如果必须,请使用 WindowVisibl
如何自定义 Inno Setup 安装程序的欢迎页面? 我想创建一个类似于 Skype 安装程序的安装程序,只有 3 个页面: 带有一些选项的自定义欢迎页面 进度页 使用“运行程序”选项完成页面 但是
我已经为我想更新的程序创建了文件。 我希望在安装之前,检查程序是否也在标准目录中,如果不是,则正确的目录可以选择程序所在的位置。 我试过这个: [Files] Source: "C:\Data"; D
我是一名优秀的程序员,十分优秀!