标签: code-injection

使用注入的代码和QWidget查找第三方QWidget :: find(hwnd)

我有一个Qt Dll,我使用Windows绕道库注入第三方应用程序:

if(!DetourCreateProcessWithDll( Path, NULL, NULL, NULL, TRUE, 
                                CREATE_DEFAULT_ERROR_MODE | CREATE_SUSPENDED, NULL, NULL,
                                &si, &pi, "C:\\Program Files\\Microsoft Research\\Detours Express 2.1\\bin\\detoured.dll",
                                "C:\\Users\\Dave\\Documents\\Visual Studio 2008\\Projects\\XOR\\Debug\\XOR.dll", NULL))
Run Code Online (Sandbox Code Playgroud)

然后我设置了一个系统范围的钩子来拦截窗口创建:

HHOOK h_hook = ::SetWindowsHookEx(WH_CBT, (HOOKPROC)CBTProc, Status::getInstance()->getXORInstance(), 0);
Run Code Online (Sandbox Code Playgroud)

其中XOR是我的程序名,而Status :: getInstance()是一个Singleton,我保持全局变量.

在我的CBTProc回调中,我想拦截所有QWidgets的窗口:

HWND hwnd= FindWindow(L"QWidget", NULL);
Run Code Online (Sandbox Code Playgroud)

这很好用,因为我得到了一个相应的HWND(我用Spy ++检查过)然后,我想得到一个指向QWidget的指针,所以我可以使用它的函数:

QWidget* q = QWidget::find(hwnd);
Run Code Online (Sandbox Code Playgroud)

但这是问题所在,返回的指针始终为0.我是不是正确地将代码注入到进程中?或者我不是应该使用QWidget :: find()吗?

谢谢,

戴夫

编辑:如果我将QWidget :: find()函数更改为我的DLL的导出函数,在设置钩子后(所以我可以设置并捕获断点),QWidgetPrivate :: mapper为NULL.

dll hook qt code-injection qwidget

7
推荐指数
1
解决办法
1939
查看次数

dalvik上的字节码注入

我在android平台上问了这个,但是没有收到回复.我已经提到了这个帖子,但找不到他所指的帖子(动态生成Dalvik字节码到运行的Dalvik/Android应用程序)

此外,还提出了此问题(http://code.google.com/p/android/issues/detail?id=6322)

所以,我的问题是,

  1. 这方面有什么进展吗?
  2. 是否可以将新的字节码注入正在加载的类中?
  3. 如果是这样,任何指针都相同?

干杯.Earlence

android bytecode code-injection dalvik

7
推荐指数
1
解决办法
2206
查看次数

在OSX上挂钩C++方法?

我正在某些应用程序中注入一个dylib以获得某些期望的行为.

我能够正确地连接平面C API.一旦我注入了dylib,我会在符号表中查看并使用我的函数地址更新其条目,然后调用原始函数.

因此,符号名称对我来说很重要.

我的问题是C++名称修改.我们如何挂钩名称已被破坏的C++函数.我读了堆栈溢出的一些地方,可以用mach_override挂钩c ++代码,但没有示例或引用.

有些人可以举例说明如何实现C++的挂钩吗?

编辑: 我用$ c++filt -n _ZN10WindowData12GetCGContextEv作为例子并得到了输出WindowData::GetCGContext()

  1. WindowData是类还是名称空间?
  2. 我怎么挂钩呢?我需要一些前向声明和外部函数来正确使用WindowData :: GetCGContext()进行挂钩.

像这样......

typedef void* (*WindowData_GetCGContextProcPtr)(void* inObj);
static WindowData_GetCGContextProcPtr gWindowDataGetCGContextProcPtr = NULL;
void*  try_WindowDataGetCGContextProcPtr(void* inObj)
{
    printf("try_WindowDataGetCGContextProcPtr \n");

    return gWindowDataGetCGContextProcPtr(inObj);
}
Run Code Online (Sandbox Code Playgroud)

现在,我想要修补此方法.

gWindowDataGetCGContextProcPtr  = (WindowData_GetCGContextProcPtr)Patch((const void*)&WindowData::GetCGContext, (const void*)&try_WindowDataGetCGContextProcPtr);
Run Code Online (Sandbox Code Playgroud)

此修补程序提供编译错误.

error: 'WindowData' has not been declared
error: 'GetCGContext' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

我是怎么解决的?

c c++ macos hook code-injection

7
推荐指数
1
解决办法
1079
查看次数

使用Haskell将函数注入Java .class文件

我使用Haskell编写了一个Java字节码解析器,它运行得很好.然而,下一步让我完全难过.

我的Haskell程序需要修改.class文件,以便在执行时,Java程序打印:

" 在执行方法之前输入[此处的方法名称] ",和

执行方法后" 退出[此处的方法名称] ".

我所知道的是,我们需要在调用时附加常量池和方法表System.out.println,但我觉得我仍然缺少某些东西.

  • 解决这个问题的最佳方法是什么?
  • 你怎么知道如何调用System.out.println字节码?
  • 如何使用方法名称存储字符串,以后将其作为参数调用System.out.println

java haskell bytecode code-injection

7
推荐指数
1
解决办法
525
查看次数

在Android中注入非英文字符

我在远程控制应用程序上编程.其中一项任务是注入角色.我目前使用的代码如下所示:

Instrumentation instr = new Instrumentation();

String str="a";

// basically the same like calling instr.sendStringSync(str);
char[] chars = str.toCharArray();
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] keyEvents = keyCharacterMap.getEvents(chars);
if (keyEvents != null) {
    for (KeyEvent kev : keyEvents) {
        instr.sendKeySync(kev);
    }
}
Run Code Online (Sandbox Code Playgroud)

这完全适用于英文字符(字符显示在EditText框中).但是,如果我尝试注入例如韩文字符,则会失败.函数getEvents返回null,即使我配置了韩语和键盘也是如此.

我知道还有另一种直接注入字符串的方法:

KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Run Code Online (Sandbox Code Playgroud)

这也不起作用 - 在EditText框中没有显示任何字符,并且在我的测试活动中也没有调用onKeyMultiple().

这很奇怪,因为具有相同事件的dispatchKeyEvent()在我的测试活动中起作用:

KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
Run Code Online (Sandbox Code Playgroud)

我的远程控制应用程序需要注入事件,无论哪个活动.这可以使用Instrumentation(带有android.permission.INJECT_EVENTS平台密钥和签名).

如何使用仪器注入非英文字符?还有另一种方法来实现这一目标吗?例如,使用dispatchKeyEvent(也必须适用于其他活动/应用程序).

events android code-injection

7
推荐指数
1
解决办法
1492
查看次数

安全地评估R中的算术表达式?

编辑

好吧,因为似乎有很多混乱,我将稍微简化一下这个问题.您可以尝试回答下面的原始问题,或者您可以解决此版本而忽略该行下方的所有内容.

我的目标是采取任意表达并在极其受限制的环境中对其进行评估.此环境仅包含具有以下类型值的变量:

  • 数字向量
  • 带有一个或多个数字向量并返回数字向量的纯函数(即算术运算符)

此外,表达式必然能够使用任何文字,例如数字和字符串常量(但不是数字或字符串向量,因为那些需要c).我想评估此环境中的表达式,并确保表达式无法访问环境之外的任何内容,以便我可以确定评估表达式不会带来安全风险.那么,在下面的代码中,你能用一个字符串填充空白,这个字符串在评估时会做些调皮吗?"顽皮的东西"被定义为在屏幕上打印某些东西,访问变量的值secret,执行任何shell命令(最好是产生输出的命令),或任何其他看起来很顽皮的东西(证明你的选择).

a <- 1
b <- 2
x <- 5
y <- 1:10
z <- -1

## Give secret a random value so that you can't just compute it from
## the above variables
secret <- rnorm(5)

allowed.variables <- c(
    ## Numeric variables
    "a", "b", "x", "y", "z",
    ## Arithmetic operators
    "(", "+", "-", "/", "*", "^", "sqrt", "log", "log10", "log2", "exp", "log1p")

restricted.environment <- Map(get, allowed.variables)

## Example naughty expressions …
Run Code Online (Sandbox Code Playgroud)

evaluation r code-injection

7
推荐指数
1
解决办法
602
查看次数

Grails:在正常的groovy类中获取数据源

如何从普通的groovy类中访问数据源?注入不像服务那样​​工作.

原因是我需要从groovy类中进行一些手动数据库调用(即:使用groovy.sql.Sql类的SQL语句),因为我正在使用遗留数据库.

sql grails groovy datasource code-injection

7
推荐指数
1
解决办法
8987
查看次数

使用solrj时,防止solr查询注入

查询HttpSolrServer.

SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery(q);
QueryResponse queryResponse = solrServer.query(solrQuery);
Run Code Online (Sandbox Code Playgroud)

我需要构建一个solr查询,比如"author:*user_inputed_text*title:*user_inputed_text*"我需要类似PreparedStatement的东西,但我在solrj库中找不到类似的东西.如何构建不会引起注入的查询?如何使用户输入字符串 - \user_input_text\safe?

我正在使用连接构建查询.当我有,例如这段代码:

public String buildQuery(String userInputedText) {
    String query = "author:*" + userInputedText + "* OR title:*" + userInputedText + "*";
}
Run Code Online (Sandbox Code Playgroud)

然后用户可以注入一些子查询并接收结果,但不受限制.例如,输入的字符串是:"OR title:".所以,整个查询将是:作者:*OR标题:*OR标题:*OR标题:*

在这种情况下,用户收到所有结果(它们不受限制)并传递模式作者:*?*OR title:*?*.

solr code-injection solrj

7
推荐指数
1
解决办法
3241
查看次数

具有默认参数的Unity构造函数

使用默认参数注入构造函数的问题.

例如

container.RegisterType<IAddressImportRepository, AddressImportRepository>(
    new PerRequestLifetimeManager());

public AddressImportRepository(
    FairFlexxDbContext context, bool isUseSecurePredicate = true)
    : base(context, isUseSecurePredicate)
{
}
Run Code Online (Sandbox Code Playgroud)

错误:

[InvalidOperationException:类型Boolean没有可访问的构造函数.]
Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.ThrowForNullExistingObject(IBuilderContext context)+239 lambda_method(Closure,IBuilderContext)+60
Microsoft.Practices.ObjectBuilder2.<> c__DisplayClass1.b__0(IBuilderContext上下文)+71
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)+42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)+333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)+274
Microsoft .Practices.ObjectBuilder2.BuilderContext.NewBuildUp(NamedTypeBuildKey newBuildKey)+167
Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)+101 lambda_method(Closure,IBuilderContext)+425
Microsoft.Practices.ObjectBuilder2.<> c__DisplayClass1.b__0 (IBuilderContext context)+71
Microsoft.Practices.ObjectB uilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)+42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)+333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)+274
Microsoft.Practices.ObjectBuilder2.BuilderContext.NewBuildUp (NamedTypeBuildKey newBuildKey)+167
Microsoft.Practices.Unity.ObjectBuilder.NamedTypeDependencyResolverPolicy.Resolve(IBuilderContext context)+101 lambda_method(Closure,IBuilderContext)+222
Microsoft.Practices.ObjectBuilder2.<> c__DisplayClass1.b__0(IBuilderContext context)+71
Microsoft. Practices.ObjectBuilder2.DynamicMethodBuildPlan.BuildUp(IBuilderContext context)+42
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context)+333
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)+274
Microsoft.Practices.Unity.UnityContainer .DoBuildUp(Type t,Object existing,String name,IEnumerable`1 resolverOverri des)+383

c# unity-container code-injection

7
推荐指数
1
解决办法
3725
查看次数

像ButterKnife和Dagger这样的依赖注入框架使应用程序更慢吗?

我即将开始一个相对较大的项目并且想知道

使用这些依赖注入框架的真正好处是什么?

DI会增加应用加载时间吗?或提供任何性能价值?

Googles文档反对使用Robojuice因为它的RAM使用,这是所有DI的共同点吗?

有兴趣听取大家的意见.

dependencies android code-injection dagger butterknife

7
推荐指数
1
解决办法
730
查看次数