标签: code-injection

如何在Windows应用程序中对加扰的数据包进行逆向工程?

我有一个Windows exe应用程序,用于以清除方式将数据包发送到服务器.这个应用程序(让我们称之为客户端应用程序)绝对是源代码,但一些聪明的黑客十六进制编辑二进制文件,并使其发送被扰乱的数据包.

现在,显然,这些数据包是以可解密的方式进行加扰(否则服务器将无法理解它),但我想要做的是编写一个模拟这个二进制应用程序的模拟器,将相同的数据包发送到服务器,并能够解密响应(如果它被扰乱).

十六进制客户端需要额外的dll才能运行,而旧客户端则没有.我假设以某种方式十六进制客户端设法加载该DLL(让我们称之为client.dll)和该DLL的功能是实现加扰/解扰,通过挂钩到一些窗口api重新路由从发送的所有数据包client.exe进程.

如果有人能指导我如何开始研究这一切是如何工作的,以及我如何对这些报道进行逆向工程,那将非常感激.

我不知道提供什么样的信息,但如果有任何缺陷,只需回复,我会发布更多细节,如果有人想要二进制文件,我很乐意提供它.


任何感兴趣的人的二进制下载:

http://dl.getdropbox.com/u/46623/client.dll

http://dl.getdropbox.com/u/46623/newClient.exe

http://dl.getdropbox.com/u/46623/originalClient.exe

这些不会运行,因为资源文件是必需的 - 它们大约是3演出,因此太大而无法上传到任何地方.名称已更改为保护guilty =),但这可能不保护DLL的名称...

windows encryption dll reverse-engineering code-injection

5
推荐指数
1
解决办法
1299
查看次数

在另一个线程中注入C++异常

使用exception_ptr的C++ 0x特性,可以在一个线程中存储异常,并让另一个线程访问它.但是,另一个线程必须调用rethrow_exception().但是,在某些情况下,我需要实际中断其他线程并立即在那里引发异常; 将exception_ptr轮询为非null不是解决方案.

我找到了一个解决方案,通过挂起线程并修改其指令指针寄存器,然后在恢复之前,在http://www.codeproject.com/KB/exception/ExcInject.aspx中在Windows中注入异常.但是,我还需要我的代码才能在Linux上运行.我如何在那里完成它?

如果我使用像getcontext()这样的东西,它获取当前线程的上下文(而在Windows中,GetContext()接受一个线程参数),所以我必须在信号处理程序中调用它.但是我已经读过不应该在信号处理程序中调用getcontext()/ setcontext()...或者,我可以直接在信号处理程序中调用rethrow_exception(),但我担心这不会产生预期的效果,中断的线程使堆栈以相同的方式展开,并且范围的所有析构函数都被调用等.

c++ multithreading signals exception code-injection

5
推荐指数
1
解决办法
1609
查看次数

dylib析构函数不会被调用

我有一个dylib,我可以通过注入mac os x加载.构造函数调用运行良好.

 __attribute__((constructor))
 static void initialize()
Run Code Online (Sandbox Code Playgroud)

但析构函数不会被调用?因此资源初始化泄漏.

__attribute__((destructor))
static void destroy()
Run Code Online (Sandbox Code Playgroud)
  1. 如果应用程序退出,dylib会自动卸载吗?
  2. 如果应用程序退出,是否会自动卸载注入的dylib?
  3. 我们如何在运行时从应用程序中卸载dylib?作为它的注入代码,我可以访问私有区域.有命令这样做吗?

c++ macos gcc code-injection dylib

5
推荐指数
1
解决办法
601
查看次数

C++:从64位进程注入32位目标

我最近在C++中编写了一个DLL-Injector,其要求如下

  • 喷射过程(让我们把它叫做"注射器")以及该DLL被注入(注射)在64位和32位的变体存在.根据目标,尝试注入匹配的注射版本.
  • 即使Injector以64位运行,也必须能够注入32位(WOW64)的目标进程

很快我注意到,Injector 中GetProcAddress("LoadLibraryA")的调用返回一个"不可用"句柄,因为32位目标加载了另一个kernel32.dll,并且函数的地址不同,因此注入失败(无法使用返回的地址/句柄启动远程线程).此外,32位进程将kernel32.dll加载到不同的基址,这使得创建远程线程更加不可能.

为了说清楚我的意思,会发生以下情况:

  • Injector有64位版本的kernel32.dll加载在0x12340000
  • Injector 从此kernel32.dll 检索LoadLibraryA 0x00005678的句柄
  • Target 在0xABCD0000上加载了32位版本的kernel32.dll
  • 此kernel32.dll的LoadLibrary句柄应为0x0000EFAB
  • Injector尝试使用函数0x12345678在目标中启动远程线程,但是需要0xABCDEFAB

当从64位进程注入64位进程,从32位注入32位时,通常没有问题,因为kernel32.dll(很可能)在相同的基地址加载并且可以使用相同的函数地址 - 到目前为止,这是我的解释.在这种情况下,条件不同.

为了解决这个问题,我做了以下步骤:

  • 64位Injector使用EnumProcessModulesEx()检索由32位目标加载的kernel32.dll的地址(应为0xABCD000)
  • 获取该kernel32.dll的文件名,解析PE头并获取LoadLibraryA的RVA (应为0x000EFAB)
  • 此时,我们知道在32位目标中加载kernel32.dll的位置以及此DLL中函数的地址.
  • 64位Injector使用ImageBase + Function RVA在32位目标中启动远程线程,在这种情况下是神奇的0xABCDEFAB

这种方法实际上运行得很好,但我无法摆脱这是总开销的想法,并且必须有一个更简单的解决方案来从64位注入器注入32位目标.

我有两个问题,如果可以在这里回答,我将非常感激:

  1. 有没有更简单的方法来实现这种注射?
  2. 我一直在采取的方法可能存在问题,我没想过?

任何答案都非常感谢,谢谢!

编辑:哦,我的天啊...我刚刚意识到,我在最初的帖子中描述了错误的情况.INJECTOR是64位,TARGET是32位(最初是另一种方式,但我已经纠正了它).Ben Voigt在下面的评论完全正确,对EnumProcessModulesEx的调用将失败.一个大大的抱歉,这种混乱:(

c++ dll winapi code-injection 32bit-64bit

5
推荐指数
2
解决办法
6331
查看次数

回显$ _POST变量的代码注入漏洞?

我想知道我在fwrite下面是否有代码注入漏洞?

foreach($_POST as $key=>$val) {
    fwrite($fh, "\nPOST variable named " . $key . " has the value " . $val);
}
Run Code Online (Sandbox Code Playgroud)

在将这些值写入日志文件之前,我应该以某种方式清理这些值吗?

UPDATE.fh是一个日志文件处理程序

php code-injection

5
推荐指数
1
解决办法
2276
查看次数

首先发生 - Spring的依赖注入,还是静态块的执行?

我有一个使用静态块来初始化静态Hashtable的类.这是通过读取属性文件,解析文件的内容,然后将适当的值设置到Hashtable中来完成的.

但是,我不想指定文件的位置,而是使用Spring注入位置,基本上是为了消除类中的任何硬编码值.我确实在其他地方看到它实际上可以注入静态变量,但是它将涉及使用非静态setter.

所以我的问题是 - 在执行静态块之前是否会调用setter,或者在Spring调用setter之前是否先执行静态块(这会在我的代码中导致异常)?

谢谢!

spring static code-injection

5
推荐指数
1
解决办法
1299
查看次数

为什么这个MySQLI预处理语句允许SQL注入?

当我今天教学生如何防止SQL注入时,我有点尴尬.在专业项目中,我使用预准备语句/参数化查询作为防止SQL注入的一层(尽管我从未专业地使用过mySQL).理论上,我认为使用预准备语句时SQL注入是不可能的.

但后来这起作用......

$Search = $_GET['s'];
$stmt = $mysqli->prepare("SELECT * FROM products WHERE id = ?");
$stmt->bind_param("i", $Search);
$stmt->execute();
$Results = $stmt->get_result();
Run Code Online (Sandbox Code Playgroud)

如果我传递参数"?s = 1 OR 1 = 1",那么我可以获得所有产品的完整列表.我仍然无法在最后插入另一个查询,但我很困惑为什么在mysql/php中可以使用这种类型的基本SQL注入.我假设参数"1 OR 1 = 1"将被拒绝,因为它不是数字(显然我可以运行该数字检查......).

任何人都可以解释为什么这个工作,以及我不明白php/mysql中准备好的语句?

我的学校电脑有一个开箱即用的Zend WAMP安装btw.

编辑:这是导致我混淆的字符串值:

$Search = "1 OR 1=1";
Run Code Online (Sandbox Code Playgroud)

php sql mysqli code-injection prepared-statement

5
推荐指数
2
解决办法
1387
查看次数

EJB3拦截器无法引导上下文

我正在尝试使用@Interceptors(SpringBeanAutowiringInterceptor.class)将Spring bean注入EJB

这是我的EJB:

@Stateless
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class processMethodService implements
    processMethodService {

    @Autowired
    private SomeBean bean;

    @Schedule(minute = "*/5", hour = "*", persistent = false)
    @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
    public void startProcessing() {
        //businesslogic 
    }
}
Run Code Online (Sandbox Code Playgroud)

和beanRefContext.xml如下

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.2.xsd">

<bean id="ejb-businesslayer.application.context" lazy-init="true"
    class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg>
        <list>
            <value>classpath:/META-INF/spring-config.xml</value>
        </list>
    </constructor-arg>
</bean> `
Run Code Online (Sandbox Code Playgroud)

beanRefContext.xml,spring-config.xml位于META-INF文件夹下.

当每5分钟调用一次startProcessing时,我们得到以下异常

Exception data: javax.ejb.EJBException: session bean lifecycle interceptor failure;nested exception is:org.springframework.beans.factory.access.BootstrapException: Unable to return  specified  BeanFactory instance: factory key [null], 
from group with resource name [classpath*:beanRefContext.xml]; 
nested …
Run Code Online (Sandbox Code Playgroud)

spring dependencies code-injection ejb-3.0

5
推荐指数
1
解决办法
3579
查看次数

病毒,技术熟练的用户或特权应用程序是否可以修改已安装在用户的Android或iOS上的Cordova混合应用程序中的Javascript?

我想知道Cordova的应用程序构建安全性.因此,在应用程序安装在用户的设备上后,对手或具有root权限的其他应用程序/病毒是否可以修改存储在我的Cordova应用程序的WWW文件夹中的HTML和/或Javascript源?

我知道我不应该在我的Cordova应用程序中使用eval,但如果攻击者可以修改Javascript,它们可以造成与eval相同的伤害.

我担心如下情况:

  1. 用户安装应用程序.
  2. 攻击者拥有手机几分钟或足够长的时间来改变Javascript,以便能够公开或发送全局变量等运行时信息.
  3. 攻击者添加了将会话密钥发送到域或电子邮件的Javascript代码.或者,如果正确使用域白名单,攻击者只是将它们存储在他/她以后可以检索的持久存储中.

这是一个现实的问题吗?

javascript security eval code-injection cordova

5
推荐指数
0
解决办法
101
查看次数

Javascript在浏览器中注入

每当我访问任何继续加载的页面时,我都在使用4g无线网络.当我查看页面的源代码时,会在代码中注入脚本

<script type = 'text/javascript' id ='1qa2ws' charset='utf-8' src='http://10.80.196.101:8080/www/default/base.js'></script>

请帮助它真烦人.

javascript code-injection

5
推荐指数
1
解决办法
836
查看次数