将功能插入二进制应用程序(3d方,闭源)的最佳方法是什么.
目标应用程序在OSX上,似乎是使用gcc 3+编译的.我可以看到二进制文件中实现的函数列表,并调试和隔离了一个我想远程调用的特定函数.
具体来说,zoomByFactor(x,y)当我从复杂的HIDevice接收某些数据时,我想调用这个函数 - 让它称之为void .
我可以轻松地将指令修改或注入二进制文件本身(即,修补不需要仅在RAM中进行).
作为一种"很好"的方式,你会推荐什么?
编辑:
我确实需要整个申请.所以我不能抛弃它并使用库.(对于那些需要道德解释的人:这是一个专有的CAD软件,其公司网站自2006年以来一直没有更新.我已经支付了这个产品(相当多的钱,实际上是什么)并且有项目我不能轻易从中迁移出来的数据.该产品很适合我,但我想使用我最近得到的新HID.我已经检查了应用程序的内部,我相当自信我可以用相关数据调用正确的函数并使其正常工作).
这是我到目前为止所做的,而且非常好.
我已经通过这个过程修改了部分应用程序:
xxd -g 0 binary > binary.hex cat binary.hex | awk 'substitute work' > modified.hex xxd -r modified.hex > newbinary chmod 777 newbinary
我正在做这种跳过箍,因为二进制几乎是100兆大.
我想的是我在主应用程序循环中的某个地方jmp,启动一个线程,然后返回main函数.
现在,问题是:我在哪里可以插入新代码?我需要修改符号表吗?或者,我怎样才能自动加载dylib,以便我需要做的唯一"黑客攻击"是将对正常加载的dylib的调用插入到main函数中?
我正在编写一个.NET库,将托管DLL注入外部进程.我目前的做法是:
CreateRemoteThread强制目标进程调用LoadLibrary的非托管引导DLL.从这一点开始,我们在目标进程中执行代码.ExecuteInDefaultAppDomain,该实例在托管助手DLL中执行一个方法.AppDomain.CreateInstanceFromAndUnwrap将执行传递到我的有效负载DLL,将结果转换为IInjectionPayload.IInjectionPayload,因此助手DLL可以简单地调用payload.Run().我这样做是为了通过简单地调用AppDomain.Unload(在发信号通知清理之后)可以完全卸载有效载荷代码.
这种方法有效 - 我的有效负载DLL中的类正在目标进程中实例化,因此可以执行代码- 但我不能将返回的对象强制CreateInstanceFromAndUnwrap转换为IInjectionPayload; 它抛出以下异常:
无法转换透明代理以键入'blah.Blah.IInjectionPayload'.
我已尝试使用CreateInstanceAndUnwrap,Activator.CreateInstanceFrom然后使用Object.Unwrap,但这两种方法也会导致抛出相同的异常.
我的有效载荷类的签名是:
public class Program : MarshalByRefObject, IInjectionPayload
我很难过,因为有效负载DLL肯定会被加载,并且正在按照预期实例化类.任何帮助将非常感激.
我在HTML中创建一个非常简单的表单,在Android中使用webview查看,使用文本框输入你的名字,当你点击按钮时,它会将它显示在一个段落中,并使用html和javascript进行制作.这是我的HTML代码:
<!DOCTYPE html>
<html>
<body>
<p> Write your name and win your favorite game console name and win it! The winners will be announced in 4 days.</p>
Type your name here: <input id="thebox" type="text" name="value" value=""><br>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function myFunction() {
var x = document.getElementById("thebox").value;
document.getElementById("demo").innerHTML = x;
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
新编辑表格
<form name="albert" action="" method="POST">
<label for="firstname"> First Name </label>
<br /><br />
<input type="text" name="firstname" id="firstname" />
<input type="submit" name="sbumit" value="Submit" />
</form> …Run Code Online (Sandbox Code Playgroud) 我试图通过以下方式注入JAXBContextspring应用程序上下文:
<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
<constructor-arg type="java.lang.Class" value="com.package.MyClassName"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
它引发了一个异常:
找不到匹配的工厂方法:工厂方法'newInstance'
我也尝试:
<bean id="jaxbContext" class="javax.xml.bind.JAXBContext" factory-method="newInstance">
<constructor-arg type="java.lang.String" value="com.package"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
它引发了一个例外:
javax.xml.bind.JAXBException:"com.package"不包含ObjectFactory.class或jaxb.index我确实在包"com.package"中放了一个jaxb.index文件,并在文件中有一行"MyClassName".
使用Guice,在每个JUnit测试类中获取一个新的注入器是一个好习惯,因为每个测试类应该是独立的吗?
所以我在尝试让我的asmx webservice使用依赖注入和使用IoC来实现时遇到了困难.我希望我的webservice能够使用我的内部业务层服务.Web服务将由来自不同域的外部客户端使用,主要用于发送和接收有关订单和客户等实体的信息.
一个例子是:
public class MyService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return new MyBusinessService().MyMethod();
}
}
public class MyBusinessService : IMyBusinessService
{
public string MyMethod()
{
return "hello";
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用依赖注入来消除"新"我的服务的需要,但我无法找到一种方法来做到这一点.我可以使用穷人的DI来使用它,或者至少我认为它被称为"穷人".
像这样:
public class MyService : System.Web.Services.WebService
{
private IMyBusinessService _myService;
public MyService(IMyBusinessService myService)
{
_myService = myService;
}
public MyService() : this(new MyBusinessServie()) { }
[WebMethod]
public string HelloWorld()
{
return _myService.MyMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
但我简直无法理解如何使用IoC容器来注入我的依赖项,因为我无法让服务在没有无参数构造函数的情况下运行.请善待,我不是一个有经验的程序员和刚开始测试的依赖注入,并得到它的工作在我的Windows罚款structuremap形成的应用,但就死在这一个.
我想知道,在摆弄了SendInput,SendKeys,PostMessage,SendMessage,SendNotifyMessage,keybd_event等等各种问题之后.为了找到这个...尝试将键盘输入发送到另一个非前台进程是相当挑剔和不可靠的.
我尝试了一种SendInput的方法,我在其中欺骗Z顺序(保持当前窗口在顶部)并快速前进第三方窗口,发送输入,并重新前景我的窗口.其中最终失败了,而且,不知何故,不知道为什么,设法同时也在我的窗口上触发键盘而不是前景(导致在两个窗口之间发送和接收的无限循环,直到我设法关闭该过程).
我尝试过SendMessage和PostMessage的不同组合.一个用于向下,一个用于向上,因为同时使用向下和向上导致问题,例如PostMessage用于两者,导致密钥在接收窗口上复制.或两者的SendMessage,这导致文本输入问题,但其他功能正常.用于keydown的SendMessage和用于keyUp的PostMessage适用于所有功能,但可靠性率急剧下降,并且在关键事件中增加了延迟.只有用于keydown的PostMessage和用于keyup的SendMessage的组合设法做了一些有用的事情,可能有5-10%的密钥注册失败率.对于SentNotifyMessage也是如此(就可靠性而言,其行为与SendMessage基本相同).
基本上,我已经结束了,我想知道直接在目标窗口中注入一个钩子,并做一些伏都教以这种方式向它发送击键,绕过消息队列等.这样做将会不会触发全局键事件,只会影响目标窗口.唯一的问题是,当涉及到注射/挂钩等时,我是不可知的.所以我转向你,社区.
哇呢?
我想使用PHP/Mysql注入一个登录示例,我的代码如下.
我尝试过用户名anything' --和空密码,但它不起作用,我无法登录.
谁能帮助我?
<?php
mysql_connect('localhost','root','root');
mysql_select_db('hp');
?>
<form action="" method="post">
<table width="50%">
<tr>
<td>User</td>
<td><input type="text" name="user"></td>
</tr>
<tr>
<td></td>
<td><input type="text" name="password"></td>
</tr>
</table>
<input type="submit" value="OK" name="s">
</form>
<?php
if($_POST['s']){
$user = $_POST['user'];
$pass = $_POST['password'];
$re = mysql_query("select * from zend_adminlist where user_name = '$user' and password = '$pass'");
if(mysql_num_rows($re) == 0){
echo '0';
}else{
echo '1';
}
}
?>
Run Code Online (Sandbox Code Playgroud) 我有一个演示项目,它创建一个程序集并使用它.我也可以调试注入的代码.但是,如果我进行覆盖,分析或分析,它会被计算,但我想测量它.
码:
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler icc = codeProvider.CreateCompiler();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false; // debug enabled
parameters.OutputAssembly = "DynamicCode.dll"; // if specified creates the DLL
parameters.IncludeDebugInformation = true;
CompilerResults results = icc.CompileAssemblyFromFile(parameters, "InjectedCode.cs.txt");
Run Code Online (Sandbox Code Playgroud)
我创建DLL来检查生成的IL代码.我可以在VS中调试代码.但是当我运行coverage时,如果我使用TEMP目录,或者如果我输出DLL(如上所述),则生成的程序集就会被遗漏,因此覆盖范围中不包含任何FILE(因此甚至不包括主程序集).
当我运行分析时,我只能看到调用(反射),但没有看到生成的代码.当我进行分析时(我在注入的代码中有一些错误,例如未使用的本地,以及所有内容的ofc分析),注入的代码没有报告任何问题.注入的代码:
namespace CodeInjection
{
public static class DynConcatenateString
{
public static string Concatenate(string s1, string s2){
// System.Diagnostics.Debugger.Break(); // break here for debugger and also test comment output
int a = 1+2+3+4+5; // complicated math
int b …Run Code Online (Sandbox Code Playgroud) .net c# dynamic-language-runtime code-injection visual-studio-2012
我正在阅读有关Cycript和Cydia Substrate以及它们如何用于iOS应用程序的代码注入攻击的内容.如果您在高安全性环境中工作,这样的代码应该吓到您.(忽略/ etc/password部分,只考虑使用crackedMessage替换originalMessage的能力.)
cy# MS.hookFunction(fopen, function(path, mode) {
cy> if (path == "/etc/passwd")
cy> path = "/var/passwd-fake";
cy> var file = (*oldf)(path, mode);
cy> log.push([path, mode, file]);
cy> return file;
cy> }, oldf)
Run Code Online (Sandbox Code Playgroud)
我读了一篇博客(我没有保存)说Swift没有Objective-C那么脆弱,因为它没有那么动态.然后,我还读到你可以在Swift中进行方法调配,所以我不清楚Swift是否提供任何针对代码注入攻击的保护措施.
那么,Swift是否容易受到代码注入攻击?
code-injection ×10
c# ×3
.net ×1
android ×1
appdomain ×1
asmx ×1
c#-4.0 ×1
dependencies ×1
guice ×1
html-parsing ×1
ios ×1
java ×1
javascript ×1
jaxb ×1
junit ×1
macos ×1
mysql ×1
php ×1
sendmessage ×1
spring ×1
swift ×1
webview ×1
winapi ×1