我认为我对将.NET字节码编译为本机代码感到困惑,或者我对最终结果感到困惑.因此,当我试图理解我认为理解的东西时,请耐心等待,这样你就可以帮我找出我所缺少的东西.
我想要做的是将我用C#编写的应用程序编译成普通的本机代码,就像我用C语言编写的那样.我的推理与性能无关,而是有一定程度的保护.我明白我的最终目标并非不可能(甚至真的那么难)规避,但我只是觉得逆转x86汇编比反转Reflector给我的更难.
现在,如果我把我的C#应用程序扔进Reflector,我基本上得到了我的源代码.通常,当我将非托管C/C++应用程序放入IDAPro并使用HexRays反编译器时,我不能完全获得相同程度的反编译,我不得不求助于通过x86反汇编来理解逻辑流程.我的理解是,由于应用程序位于MSIL而不是HexRays尝试反编译的更简洁的本机代码,因此这种出色的反编译来自Reflector.
我不担心客户端机器仍然需要.NET运行时,我不是想绕过任何一个.我想upx在我的程序上运行正常的软件混淆程序,并且以.NET二进制文件的形式运行失败.
根据这个相关问题我的理解是ngen做我想要的.我试过用了ngen.但是在将输出文件从C:\Windows\assemblies\...\applicationName.ni.exe目录复制到某个地方后我可以双击,并且尝试运行它会产生错误,因为它不是"有效的Win32应用程序".此外,当我applicationName.ni.exe扔进Reflector时,我得到的输出与我的输出相同applicationName.exe.因为applicationName.ni.exe应该是本机代码,我希望Reflector出错,但事实并非如此.如果按照我应该这样做的方式,为什么Reflector仍然给我这么好的反编译?
所以,再次总结一下我的主要问题:如何将我的.NET程序编译成一个原生二进制文件,Reflector不会那么容易反编译?或者,从新手反向工程师那里保护用.NET语言编写的产品的最佳实践是什么?
如果我需要一个不同的工具,我更喜欢免费的东西而不是像Codewall这样的东西.
谢谢!
更新:我明白我正在寻找的可能会限制像Reflection这样的语言的某些功能,但我认为我很好.我的代码都没有进行任何显式Assembly.Load调用或任何类型的调用.但GetProcAddress/LoadLibrary不管怎么说,那些只是被电话取代了吗?
我已经从源代码构建了OpenSSL(一个故意的旧版本;用它构建./config && make && make test)并且更愿意使用我构建的内容而不用make install链接我的程序.
失败的命令是:
gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto
-Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o`
Run Code Online (Sandbox Code Playgroud)
我收到一系列类似的错误:
common.c:(.text+0x1ea): undefined reference to `SSL_write'
Run Code Online (Sandbox Code Playgroud)
这让我觉得我的OpenSSL有点时髦.如果我-Lopenssl/openssl-0.9.8k/从命令中省略,则错误将更改为无法:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
Run Code Online (Sandbox Code Playgroud)
我是否错误地编译了OpenSSL?或者我该如何最好地解决这个问题?
这是此处发现的另一个问题的附加内容.
简而言之: 我想列出系统中的所有打开文件并检索其关联的文件名.如果这是错误的方法,或者有另一种方法,请给我一个正确的方向.或者,如果我遗漏任何细节或某些不清楚的东西,请对我大喊大叫.
像其他问题(上面链接的)一样,我不关心语言(虽然C或C++解决方案不会受到伤害),但我希望这可以在Windows XP上运行.另外,我要求避免使用内核模式驱动程序.
我对此问题的原始解决方案的问题是,如果以某种方式打开文件句柄,则NtQueryObject调用可能会挂起.这是概述了Sysinternals的论坛在这里.
根据SysInternals论坛,使用带有超时的CreateThread已经被接受的解决方案,但这样做似乎不允许每次都正确关闭进程.即使在Visual Studio中进行调试时,我有时也被迫重启计算机.有时在我运行时重启计算机不是最好的选择.
另一个被接受的解决方案是使用特定的跳过句柄GrantedAccess.我遇到的问题是,考虑GrantedAccess到上述论坛帖子中的概述,我错过了太多有用的句柄.
有人能够指出我解决我的问题吗?
谢谢!
编辑:对不起,我应该更具体地说明我的问题.的NtQuerySystemInformation通话将让我处理,该NtQueryObject调用ObjectNameInformation将挂起上是同步的管道(至少这是人们似乎要说什么)句柄.这里发布的示例使用内核模式驱动程序从FILE_OBJECT读取文件名 - 但我想避免使用驱动程序.所以是的,很像SysInternals Handle实用程序,但我相信他们也使用了驱动程序,不是吗?
编辑2:这是一种学术兴趣,因此使用本机API或未来版本中可能会破坏的其他未记录的技术并不是一个问题.而且,GrantedAccess只是避免挂起的对象是完美的.
编辑3:我的最终目标是能够看到系统上当前打开的文件.如果这是完全错误的方法,那么正确方向的另一点将非常受欢迎.
编辑:这只需要在Windows XP上运行,因为Vista +有更优雅的解决方案,因此使用未记录的功能确实不是问题.
再次感谢!
为了更多地了解FreeBSD和*nix系统,我开始从DEFCON 17 Capture The Flag游戏中查看二进制文件.现在,我正在扭转tucod二进制文件.以下是关于tucod的一些可能有用的信息:
tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped
Run Code Online (Sandbox Code Playgroud)
从一些简短的静态分析中获得的其他一些可能有用的信息是tucod绑定在端口0xDEAD(可爱,嗯?),如果你给它一个特定的密码("HANGEMHIGH!"),它将与你玩一个挂牌游戏.
我遇到的问题是我没有在gdb中遇到断点. 具体来说,我试图访问的断点位于处理客户端连接的代码中.没有断点,代码按预期执行.当我在该代码上设置断点时,子进程退出(而不是像预期的那样进入gdb).如果我在服务器分离孩子之前设置了断点,我可以点击那么好但是在点击"继续"之后,孩子不会继续处理我的连接(也就是说,它不会要求我输入密码或者玩挂机).
由于守护进程在收到新连接时分叉,我尝试告诉gdb使用此命令跟踪子进程:
(gdb) set follow-fork-mode child
Run Code Online (Sandbox Code Playgroud)
但是在fork之后单步执行指令后,似乎这不起作用.
我试过寻找调用signal,认为他们实现了一个自定义的SIGINT处理程序(或类似的),但signal我唯一的调用就是处理SIGCHLD.
我在gdb中的断点目前看起来像这样:
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x080497d0
Run Code Online (Sandbox Code Playgroud)
并且0x080497d0是我想在客户端处理代码中打破的地址.
我对分析*nix系统上的软件有点新意,可以使用一些指针. 我还应该怎么做才能解决为什么GDB不会破坏我的断点? 或者有什么重要的我只是俯瞰?
对于那些有兴趣亲眼看到二进制文件的人来说,所有游戏二进制文件都有一个torrent.
我正在使用Visual Studio 2008中的安装向导项目部署C#应用程序.
对于我来说,让Windows安排我的应用程序定期运行(例如每8小时),最简单的方法是什么?我更喜欢在应用程序安装期间进行此调度以简化最终用户的设置.
谢谢!
c# deployment scheduled-tasks setup-deployment visual-studio
我正在尝试查看监控摄像系统.远程访问可通过网站获得,该网站似乎需要下载一个充满好吃的CAB文件让我查看相机.
在我的一些系统上,这个安装过程很顺利.
在少数几个,特别是互联网较慢的那些,我进入一个无限循环:进入页面,等待很长一段时间(我假设这是下载CAB文件的地方),点击黄色栏以允许它"为所有用户安装此CAB文件"和页面重新加载.它永远不会出现在窗口说"你确定安装这个东西很酷吗?"
有一个很好的方法我可以用一些代码来支持这一点吗?我已经下载了CAB文件并提取了它的内容.它充满了DLL和一个SetupScript.vbs.我试图让SetupScript.vbs运行,我试图手动注册DLL regsrv32.我甚至将所需的.OCX和.INF文件复制到C:\Windows\Downloaded Program Files\并修改了注册表,以模仿安装顺利进行的操作.
尽管如此,当我访问网页时,它仍然需要永远,然后回到上面描述的循环中.
我需要调用哪些API来"正确"注册此组件,以便IE可以看到它?还是有一些我想念的更简单的东西?
有人可以指出我正确的方向来解决这个问题吗?浏览器是IE8,操作系统是Vista.
谢谢!
我对网络开发非常陌生.我想和朋友一起制作一个非常简单的网站.我的朋友花了很多时间为我们的网站设计布局,我们在静态HTML页面中看到了我们想要的东西.
我现在要做的是转移到像Drupal这样的内容管理系统,但保持我们已经准备好的相同设计.
由于我是这个领域的新手,我正在寻找一些关于如何实现这一飞跃的最佳实践建议.
对我来说很明显,我可以编辑一些现有的Drupal Theme来让它给我一个我想要的布局,但这是我应该走的路吗?
谢谢!
更新:此外,它不仅仅是用style.css替换我的style.css吗?
更新2:最终目标是让人们能够登录并创建新闻条目,非常类似于将显示在首页上的博客.左侧和右侧还有其他项目,但实际上并不需要任何人直接访问.它们会保持静止.
我正在尝试在另一个网站的新闻部分使用我博客中的RSS feed。直到我在博客上使用省略号之类的东西,一切似乎都可以正常工作。
预期的输出是:
One more time…less fail
Although this is no joking matter…
Run Code Online (Sandbox Code Playgroud)
实际输出为:
One more time?less fail
Although this is no joking matter…
Run Code Online (Sandbox Code Playgroud)
问题是?应该是一个...。我使用的代码对于第一行(博客标题)和第二行(博客内容)是相同的,并且该代码是:
$a = utf8_decode($a);
print($a);
Run Code Online (Sandbox Code Playgroud)
$aRSS提要中的字符串在哪里。
谁能指出正确的方向,为什么该代码对于正文(第二行)而不对标题(第一行)正确地起作用?还是建议一个更好的方法来做到这一点?
谢谢!
更新:如果您想亲自检查RSS提要以提供准确的代码,可以在以下位置找到它:feed://chimaera.fortunestreetglobal.com/wordpress/?feed = rss2
编辑:只是为了澄清,我真的在寻找我应该如何处理RSS,以便无论博客中发布了什么内容,它都将正确显示在我的其他站点上。