我有一个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的名称...
使用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(),但我担心这不会产生预期的效果,中断的线程使堆栈以相同的方式展开,并且范围的所有析构函数都被调用等.
我有一个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)
我最近在C++中编写了一个DLL-Injector,其要求如下
很快我注意到,Injector 中GetProcAddress("LoadLibraryA")的调用返回一个"不可用"句柄,因为32位目标加载了另一个kernel32.dll,并且函数的地址不同,因此注入失败(无法使用返回的地址/句柄启动远程线程).此外,32位进程将kernel32.dll加载到不同的基址,这使得创建远程线程更加不可能.
为了说清楚我的意思,会发生以下情况:
当从64位进程注入64位进程,从32位注入32位时,通常没有问题,因为kernel32.dll(很可能)在相同的基地址加载并且可以使用相同的函数地址 - 到目前为止,这是我的解释.在这种情况下,条件不同.
为了解决这个问题,我做了以下步骤:
这种方法实际上运行得很好,但我无法摆脱这是总开销的想法,并且必须有一个更简单的解决方案来从64位注入器注入32位目标.
我有两个问题,如果可以在这里回答,我将非常感激:
任何答案都非常感谢,谢谢!
编辑:哦,我的天啊...我刚刚意识到,我在最初的帖子中描述了错误的情况.INJECTOR是64位,TARGET是32位(最初是另一种方式,但我已经纠正了它).Ben Voigt在下面的评论完全正确,对EnumProcessModulesEx的调用将失败.一个大大的抱歉,这种混乱:(
我想知道我在fwrite下面是否有代码注入漏洞?
foreach($_POST as $key=>$val) {
fwrite($fh, "\nPOST variable named " . $key . " has the value " . $val);
}
Run Code Online (Sandbox Code Playgroud)
在将这些值写入日志文件之前,我应该以某种方式清理这些值吗?
UPDATE.fh是一个日志文件处理程序
我有一个使用静态块来初始化静态Hashtable的类.这是通过读取属性文件,解析文件的内容,然后将适当的值设置到Hashtable中来完成的.
但是,我不想指定文件的位置,而是使用Spring注入位置,基本上是为了消除类中的任何硬编码值.我确实在其他地方看到它实际上可以注入静态变量,但是它将涉及使用非静态setter.
所以我的问题是 - 在执行静态块之前是否会调用setter,或者在Spring调用setter之前是否先执行静态块(这会在我的代码中导致异常)?
谢谢!
当我今天教学生如何防止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) 我正在尝试使用@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) 我想知道Cordova的应用程序构建安全性.因此,在应用程序安装在用户的设备上后,对手或具有root权限的其他应用程序/病毒是否可以修改存储在我的Cordova应用程序的WWW文件夹中的HTML和/或Javascript源?
我知道我不应该在我的Cordova应用程序中使用eval,但如果攻击者可以修改Javascript,它们可以造成与eval相同的伤害.
我担心如下情况:
这是一个现实的问题吗?
每当我访问任何继续加载的页面时,我都在使用4g无线网络.当我查看页面的源代码时,会在代码中注入脚本
<script type = 'text/javascript' id ='1qa2ws' charset='utf-8' src='http://10.80.196.101:8080/www/default/base.js'></script>
请帮助它真烦人.
code-injection ×10
c++ ×3
dll ×2
javascript ×2
php ×2
spring ×2
32bit-64bit ×1
cordova ×1
dependencies ×1
dylib ×1
ejb-3.0 ×1
encryption ×1
eval ×1
exception ×1
gcc ×1
macos ×1
mysqli ×1
security ×1
signals ×1
sql ×1
static ×1
winapi ×1
windows ×1